Merge "Rename API requestValidation to requestNetworkValidation" into main
diff --git a/flags/ims.aconfig b/flags/ims.aconfig
index 78f43dc..d09259e 100644
--- a/flags/ims.aconfig
+++ b/flags/ims.aconfig
@@ -55,3 +55,10 @@
description: "For DSDA devices, controls whether the existing call will be dropped when an incoming call on a different sub is answered, when either sub does not support hold capability."
bug:"315993953"
}
+
+flag {
+ name: "update_roaming_state_to_set_wfc_mode"
+ namespace: "telephony"
+ description: "This flag updates roaming state to set wfc mode"
+ bug:"317298331"
+}
diff --git a/flags/network.aconfig b/flags/network.aconfig
index 116835f..1d36742 100644
--- a/flags/network.aconfig
+++ b/flags/network.aconfig
@@ -17,6 +17,13 @@
flag {
name: "enable_identifier_disclosure_transparency"
namespace: "telephony"
+ description: "Guards APIs for enabling and disabling identifier disclosure transparency"
+ bug: "276752426"
+}
+
+flag {
+ name: "enable_identifier_disclosure_transparency_unsol_events"
+ namespace: "telephony"
description: "Allows the framework to register for CellularIdentifierDisclosure events and emit notifications to the user about them"
bug: "276752426"
}
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 074d858..654faaa 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -257,6 +257,7 @@
private boolean mIsNullCipherAndIntegritySupported = false;
private boolean mIsIdentifierDisclosureTransparencySupported = false;
+ private boolean mIsNullCipherNotificationSupported = false;
// Create Cfu (Call forward unconditional) so that dialing number &
// mOnComplete (Message object passed by client) can be packed &
@@ -524,10 +525,10 @@
mCi.registerForImeiMappingChanged(this, EVENT_IMEI_MAPPING_CHANGED, null);
- if (mFeatureFlags.enableIdentifierDisclosureTransparency()) {
+ if (mFeatureFlags.enableIdentifierDisclosureTransparencyUnsolEvents()) {
logi(
- "enable_identifier_disclosure_transparency is on. Registering for cellular "
- + "identifier disclosures from phone "
+ "enable_identifier_disclosure_transparency_unsol_events is on. Registering for "
+ + "cellular identifier disclosures from phone "
+ getPhoneId());
mIdentifierDisclosureNotifier =
mTelephonyComponentFactory
@@ -3160,6 +3161,7 @@
handleNullCipherEnabledChange();
handleIdentifierDisclosureNotificationPreferenceChange();
+ handleNullCipherNotificationPreferenceChanged();
}
private void handleRadioOn() {
@@ -3703,7 +3705,7 @@
}
CellularIdentifierDisclosure disclosure = (CellularIdentifierDisclosure) ar.result;
- if (mFeatureFlags.enableIdentifierDisclosureTransparency()
+ if (mFeatureFlags.enableIdentifierDisclosureTransparencyUnsolEvents()
&& mIdentifierDisclosureNotifier != null
&& disclosure != null) {
mIdentifierDisclosureNotifier.addDisclosure(disclosure);
@@ -3725,6 +3727,12 @@
}
break;
+ case EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE:
+ logd("EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE");
+ ar = (AsyncResult) msg.obj;
+ mIsNullCipherNotificationSupported = doesResultIndicateModemSupport(ar);
+ break;
+
default:
super.handleMessage(msg);
}
@@ -5333,15 +5341,23 @@
public void handleIdentifierDisclosureNotificationPreferenceChange() {
if (!mFeatureFlags.enableIdentifierDisclosureTransparency()) {
logi("Not handling identifier disclosure preference change. Feature flag "
- + "ENABLE_IDENTIFIER_DISCLOSURE_TRANSPARENCY disabled");
+ + "enable_identifier_disclosure_transparency disabled");
return;
}
boolean prefEnabled = getIdentifierDisclosureNotificationsPreferenceEnabled();
- if (prefEnabled) {
+ // The notifier is tied to handling unsolicited updates from the modem, not the
+ // enable/disable API, so we only toggle the enable state if the unsol events feature
+ // flag is enabled.
+ if (mFeatureFlags.enableIdentifierDisclosureTransparencyUnsolEvents()) {
+ if (prefEnabled) {
mIdentifierDisclosureNotifier.enable();
- } else {
+ } else {
mIdentifierDisclosureNotifier.disable();
+ }
+ } else {
+ logi("Not toggling enable state for disclosure notifier. Feature flag "
+ + "enable_identifier_disclosure_transparency_unsol_events is disabled");
}
mCi.setCellularIdentifierTransparencyEnabled(prefEnabled,
@@ -5349,6 +5365,21 @@
}
@Override
+ public void handleNullCipherNotificationPreferenceChanged() {
+ if (!mFeatureFlags.enableModemCipherTransparency()) {
+ logi("Not handling null cipher notification preference change. Feature flag "
+ + "enable_modem_cipher_transparency disabled");
+ return;
+ }
+ boolean prefEnabled = getNullCipherNotificationsPreferenceEnabled();
+
+ // TODO(b/316592273): Enable / disable in NullCipherNotifier once the class is available.
+
+ mCi.setSecurityAlgorithmsUpdatedEnabled(prefEnabled,
+ obtainMessage(EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE));
+ }
+
+ @Override
public boolean isNullCipherAndIntegritySupported() {
return mIsNullCipherAndIntegritySupported;
}
@@ -5357,4 +5388,9 @@
public boolean isIdentifierDisclosureTransparencySupported() {
return mIsIdentifierDisclosureTransparencySupported;
}
+
+ @Override
+ public boolean isNullCipherNotificationSupported() {
+ return mIsNullCipherNotificationSupported;
+ }
}
diff --git a/src/java/com/android/internal/telephony/Phone.java b/src/java/com/android/internal/telephony/Phone.java
index f094748..3b47670 100644
--- a/src/java/com/android/internal/telephony/Phone.java
+++ b/src/java/com/android/internal/telephony/Phone.java
@@ -258,7 +258,8 @@
protected static final int EVENT_CELL_IDENTIFIER_DISCLOSURE = 72;
protected static final int EVENT_SET_IDENTIFIER_DISCLOSURE_ENABLED_DONE = 73;
protected static final int EVENT_SECURITY_ALGORITHM_UPDATE = 74;
- protected static final int EVENT_LAST = EVENT_SECURITY_ALGORITHM_UPDATE;
+ protected static final int EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE = 75;
+ protected static final int EVENT_LAST = EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE;
// For shared prefs.
private static final String GSM_ROAMING_LIST_OVERRIDE_PREFIX = "gsm_roaming_list_";
@@ -292,6 +293,9 @@
public static final String PREF_IDENTIFIER_DISCLOSURE_NOTIFICATIONS_ENABLED =
"pref_identifier_disclosure_notifications_enabled";
+ public static final String PREF_NULL_CIPHER_NOTIFICATIONS_ENABLED =
+ "pref_null_cipher_notifications_enabled";
+
protected final FeatureFlags mFeatureFlags;
/**
@@ -5188,6 +5192,28 @@
}
/**
+ * @return whether this Phone interacts with a modem that supports the null cipher
+ * notification feature.
+ */
+ public boolean isNullCipherNotificationSupported() {
+ return false;
+ }
+
+ /**
+ * @return whether the global null cipher notifications preference is enabled.
+ */
+ public boolean getNullCipherNotificationsPreferenceEnabled() {
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getContext());
+ return sp.getBoolean(PREF_NULL_CIPHER_NOTIFICATIONS_ENABLED, false);
+ }
+
+ /**
+ * Override to handle an update to the null cipher notification preference.
+ */
+ public void handleNullCipherNotificationPreferenceChanged() {
+ }
+
+ /**
* Notifies the IMS call status to the modem.
*
* @param imsCallInfo The list of {@link ImsCallInfo}.
diff --git a/src/java/com/android/internal/telephony/PhoneFactory.java b/src/java/com/android/internal/telephony/PhoneFactory.java
index 4705d43..b1ff500 100644
--- a/src/java/com/android/internal/telephony/PhoneFactory.java
+++ b/src/java/com/android/internal/telephony/PhoneFactory.java
@@ -215,8 +215,8 @@
if (context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_TELEPHONY_EUICC)) {
- sEuiccController = EuiccController.init(context);
- sEuiccCardController = EuiccCardController.init(context);
+ sEuiccController = EuiccController.init(context, sFeatureFlags);
+ sEuiccCardController = EuiccCardController.init(context, sFeatureFlags);
}
for (int i = 0; i < numPhones; i++) {
diff --git a/src/java/com/android/internal/telephony/TelephonyCountryDetector.java b/src/java/com/android/internal/telephony/TelephonyCountryDetector.java
index 365be88..56e8b46 100644
--- a/src/java/com/android/internal/telephony/TelephonyCountryDetector.java
+++ b/src/java/com/android/internal/telephony/TelephonyCountryDetector.java
@@ -29,6 +29,7 @@
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
@@ -62,6 +63,7 @@
private static final String TAG = "TelephonyCountryDetector";
private static final String ALLOW_MOCK_MODEM_PROPERTY = "persist.radio.allow_mock_modem";
private static final String BOOT_ALLOW_MOCK_MODEM_PROPERTY = "ro.boot.radio.allow_mock_modem";
+ private static final boolean DEBUG = !"user".equals(Build.TYPE);
private static final int EVENT_LOCATION_CHANGED = 1;
private static final int EVENT_LOCATION_COUNTRY_CODE_CHANGED = 2;
private static final int EVENT_NETWORK_COUNTRY_CODE_CHANGED = 3;
@@ -552,7 +554,7 @@
}
private static boolean isMockModemAllowed() {
- return (SystemProperties.getBoolean(ALLOW_MOCK_MODEM_PROPERTY, false)
+ return (DEBUG || SystemProperties.getBoolean(ALLOW_MOCK_MODEM_PROPERTY, false)
|| SystemProperties.getBoolean(BOOT_ALLOW_MOCK_MODEM_PROPERTY, false));
}
diff --git a/src/java/com/android/internal/telephony/emergency/RadioOnStateListener.java b/src/java/com/android/internal/telephony/emergency/RadioOnStateListener.java
index d61c146..4ba38f0 100644
--- a/src/java/com/android/internal/telephony/emergency/RadioOnStateListener.java
+++ b/src/java/com/android/internal/telephony/emergency/RadioOnStateListener.java
@@ -22,7 +22,7 @@
import android.os.Message;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
-import android.telephony.satellite.ISatelliteStateCallback;
+import android.telephony.satellite.ISatelliteModemStateCallback;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.SomeArgs;
@@ -142,7 +142,8 @@
}
};
- private final ISatelliteStateCallback mSatelliteCallback = new ISatelliteStateCallback.Stub() {
+ private final ISatelliteModemStateCallback mSatelliteCallback =
+ new ISatelliteModemStateCallback.Stub() {
@Override
public void onSatelliteModemStateChanged(int state) {
mHandler.obtainMessage(MSG_SATELLITE_ENABLED_CHANGED).sendToTarget();
diff --git a/src/java/com/android/internal/telephony/euicc/EuiccCardController.java b/src/java/com/android/internal/telephony/euicc/EuiccCardController.java
index 2f73c91..6e1c8dd 100644
--- a/src/java/com/android/internal/telephony/euicc/EuiccCardController.java
+++ b/src/java/com/android/internal/telephony/euicc/EuiccCardController.java
@@ -16,14 +16,20 @@
package com.android.internal.telephony.euicc;
+import static android.content.pm.PackageManager.FEATURE_TELEPHONY_EUICC;
+import static android.telephony.TelephonyManager.ENABLE_FEATURE_MAPPING;
+
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.AppOpsManager;
+import android.app.compat.CompatChanges;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.ComponentInfo;
+import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.Handler;
import android.os.RemoteException;
@@ -39,6 +45,7 @@
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.uicc.UiccCard;
import com.android.internal.telephony.uicc.UiccController;
@@ -66,6 +73,8 @@
private SimSlotStatusChangedBroadcastReceiver mSimSlotStatusChangeReceiver;
private EuiccController mEuiccController;
private UiccController mUiccController;
+ private FeatureFlags mFeatureFlags;
+ private PackageManager mPackageManager;
private static EuiccCardController sInstance;
@@ -87,10 +96,10 @@
}
/** Initialize the instance. Should only be called once. */
- public static EuiccCardController init(Context context) {
+ public static EuiccCardController init(Context context, FeatureFlags featureFlags) {
synchronized (EuiccCardController.class) {
if (sInstance == null) {
- sInstance = new EuiccCardController(context);
+ sInstance = new EuiccCardController(context, featureFlags);
} else {
Log.wtf(TAG, "init() called multiple times! sInstance = " + sInstance);
}
@@ -110,8 +119,9 @@
return sInstance;
}
- private EuiccCardController(Context context) {
- this(context, new Handler(), EuiccController.get(), UiccController.getInstance());
+ private EuiccCardController(Context context, FeatureFlags featureFlags) {
+ this(context, new Handler(), EuiccController.get(), UiccController.getInstance(),
+ featureFlags);
TelephonyFrameworkInitializer
.getTelephonyServiceManager()
.getEuiccCardControllerServiceRegisterer()
@@ -123,13 +133,16 @@
Context context,
Handler handler,
EuiccController euiccController,
- UiccController uiccController) {
+ UiccController uiccController,
+ FeatureFlags featureFlags) {
mContext = context;
mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
mEuiccMainThreadHandler = handler;
mUiccController = uiccController;
mEuiccController = euiccController;
+ mFeatureFlags = featureFlags;
+ mPackageManager = context.getPackageManager();
if (isBootUp(mContext)) {
mSimSlotStatusChangeReceiver = new SimSlotStatusChangedBroadcastReceiver();
@@ -293,6 +306,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getAllProfiles");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -342,6 +357,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getProfile");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -390,6 +407,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getEnabledProfile");
+
String iccId = null;
boolean isValidSlotPort = false;
// get the iccid whether or not the port is active
@@ -474,6 +493,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "disableProfile");
+
EuiccPort port = getEuiccPortFromIccId(cardId, iccid);
if (port == null) {
try {
@@ -522,6 +543,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "switchToProfile");
+
EuiccPort port = getEuiccPort(cardId, portIndex);
if (port == null) {
try {
@@ -588,6 +611,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "setNickname");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -636,6 +661,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "deleteProfile");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -687,6 +714,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "resetMemory");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -738,6 +767,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getDefaultSmdpAddress");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -786,6 +817,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getSmdsAddress");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -834,6 +867,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "setDefaultSmdpAddress");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -882,6 +917,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getRulesAuthTable");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -931,6 +968,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getEuiccChallenge");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -979,6 +1018,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getEuiccInfo1");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1027,6 +1068,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "getEuiccInfo2");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1076,6 +1119,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "authenticateServer");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1126,6 +1171,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "prepareDownload");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1175,6 +1222,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "loadBoundProfilePackage");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1226,6 +1275,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "cancelSession");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1274,6 +1325,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "listNotifications");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1323,6 +1376,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "retrieveNotificationList");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1372,6 +1427,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "retrieveNotification");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1421,6 +1478,8 @@
return;
}
+ enforceTelephonyFeatureWithException(callingPackage, "removeNotificationFromList");
+
EuiccPort port = getFirstActiveEuiccPort(cardId);
if (port == null) {
try {
@@ -1469,6 +1528,29 @@
Binder.restoreCallingIdentity(token);
}
+ /**
+ * Make sure the device has required telephony feature
+ *
+ * @throws UnsupportedOperationException if the device does not have required telephony feature
+ */
+ private void enforceTelephonyFeatureWithException(@Nullable String callingPackage,
+ @NonNull String methodName) {
+ if (callingPackage == null || mPackageManager == null) {
+ return;
+ }
+
+ if (!mFeatureFlags.enforceTelephonyFeatureMappingForPublicApis()
+ || !CompatChanges.isChangeEnabled(ENABLE_FEATURE_MAPPING, callingPackage,
+ Binder.getCallingUserHandle())) {
+ return;
+ }
+
+ if (!mPackageManager.hasSystemFeature(FEATURE_TELEPHONY_EUICC)) {
+ throw new UnsupportedOperationException(
+ methodName + " is unsupported without " + FEATURE_TELEPHONY_EUICC);
+ }
+ }
+
private static void loge(String message) {
Log.e(TAG, message);
}
diff --git a/src/java/com/android/internal/telephony/euicc/EuiccController.java b/src/java/com/android/internal/telephony/euicc/EuiccController.java
index c8f3368..a24ab43 100644
--- a/src/java/com/android/internal/telephony/euicc/EuiccController.java
+++ b/src/java/com/android/internal/telephony/euicc/EuiccController.java
@@ -15,6 +15,9 @@
*/
package com.android.internal.telephony.euicc;
+import static android.content.pm.PackageManager.FEATURE_TELEPHONY_EUICC;
+import static android.telephony.TelephonyManager.ENABLE_FEATURE_MAPPING;
+
import android.Manifest;
import android.Manifest.permission;
import android.annotation.NonNull;
@@ -60,6 +63,7 @@
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.euicc.EuiccConnector.OtaStatusChangedCallback;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.subscription.SubscriptionManagerService;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.UiccController;
@@ -111,6 +115,7 @@
private final TelephonyManager mTelephonyManager;
private final AppOpsManager mAppOpsManager;
private final PackageManager mPackageManager;
+ private final FeatureFlags mFeatureFlags;
// These values should be set or updated upon 1) system boot, 2) EuiccService/LPA is bound to
// the phone process, 3) values are updated remotely by server flags.
@@ -118,10 +123,10 @@
private List<String> mUnsupportedCountries;
/** Initialize the instance. Should only be called once. */
- public static EuiccController init(Context context) {
+ public static EuiccController init(Context context, FeatureFlags featureFlags) {
synchronized (EuiccController.class) {
if (sInstance == null) {
- sInstance = new EuiccController(context);
+ sInstance = new EuiccController(context, featureFlags);
} else {
Log.wtf(TAG, "init() called multiple times! sInstance = " + sInstance);
}
@@ -141,14 +146,14 @@
return sInstance;
}
- private EuiccController(Context context) {
- this(context, new EuiccConnector(context));
+ private EuiccController(Context context, FeatureFlags featureFlags) {
+ this(context, new EuiccConnector(context), featureFlags);
TelephonyFrameworkInitializer
.getTelephonyServiceManager().getEuiccControllerService().register(this);
}
@VisibleForTesting
- public EuiccController(Context context, EuiccConnector connector) {
+ public EuiccController(Context context, EuiccConnector connector, FeatureFlags featureFlags) {
mContext = context;
mConnector = connector;
mSubscriptionManager = (SubscriptionManager)
@@ -157,6 +162,7 @@
context.getSystemService(Context.TELEPHONY_SERVICE);
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
mPackageManager = context.getPackageManager();
+ mFeatureFlags = featureFlags;
}
/**
@@ -1957,6 +1963,9 @@
@Override
public boolean isSimPortAvailable(int cardId, int portIndex, String callingPackage) {
mAppOpsManager.checkPackage(Binder.getCallingUid(), callingPackage);
+
+ enforceTelephonyFeatureWithException(callingPackage, "isSimPortAvailable");
+
// If calling app is targeted for Android U and beyond, check for other conditions
// to decide the port availability.
boolean shouldCheckConditionsForInactivePort = isCompatChangeEnabled(callingPackage,
@@ -2063,4 +2072,27 @@
+ " changeEnabled: " + changeEnabled);
return changeEnabled;
}
+
+ /**
+ * Make sure the device has required telephony feature
+ *
+ * @throws UnsupportedOperationException if the device does not have required telephony feature
+ */
+ private void enforceTelephonyFeatureWithException(@Nullable String callingPackage,
+ @NonNull String methodName) {
+ if (callingPackage == null || mPackageManager == null) {
+ return;
+ }
+
+ if (!mFeatureFlags.enforceTelephonyFeatureMappingForPublicApis()
+ || !CompatChanges.isChangeEnabled(ENABLE_FEATURE_MAPPING, callingPackage,
+ Binder.getCallingUserHandle())) {
+ return;
+ }
+
+ if (!mPackageManager.hasSystemFeature(FEATURE_TELEPHONY_EUICC)) {
+ throw new UnsupportedOperationException(
+ methodName + " is unsupported without " + FEATURE_TELEPHONY_EUICC);
+ }
+ }
}
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
index b21d45d..9f3ec3b 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
@@ -24,7 +24,7 @@
import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_PLMN_BLOCK;
import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_PLMN_BLOCK_WITH_TIMEOUT;
import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_RAT_BLOCK;
-import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCK;
+import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCKS;
import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_NONE;
import static com.android.internal.telephony.CommandsInterface.CB_FACILITY_BAIC;
@@ -2436,7 +2436,9 @@
if (mCT.getState() == PhoneConstants.State.IDLE) {
if (DBG) logd("updateRoamingState now: " + newRoamingState);
- mLastKnownRoamingState = newRoamingState;
+ if (!mFeatureFlags.updateRoamingStateToSetWfcMode()) {
+ mLastKnownRoamingState = newRoamingState;
+ }
CarrierConfigManager configManager = (CarrierConfigManager)
getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
// Don't set wfc mode if carrierconfig has not loaded. It will be set by GsmCdmaPhone
@@ -2445,6 +2447,9 @@
configManager.getConfigForSubId(getSubId()))) {
ImsManager imsManager = mImsManagerFactory.create(mContext, mPhoneId);
imsManager.setWfcMode(imsManager.getWfcMode(newRoamingState), newRoamingState);
+ if (mFeatureFlags.updateRoamingStateToSetWfcMode()) {
+ mLastKnownRoamingState = newRoamingState;
+ }
}
} else {
if (DBG) logd("updateRoamingState postponed: " + newRoamingState);
@@ -2531,7 +2536,7 @@
suggestedModemAction = suggestedAction;
} else if (mFeatureFlags.addRatRelatedSuggestedActionToImsRegistration()) {
if ((suggestedAction == SUGGESTED_ACTION_TRIGGER_RAT_BLOCK)
- || (suggestedAction == SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCK)) {
+ || (suggestedAction == SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCKS)) {
suggestedModemAction = suggestedAction;
}
}
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index b4ce9c7..c691737 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -68,8 +68,8 @@
import android.telephony.satellite.INtnSignalStrengthCallback;
import android.telephony.satellite.ISatelliteCapabilitiesCallback;
import android.telephony.satellite.ISatelliteDatagramCallback;
+import android.telephony.satellite.ISatelliteModemStateCallback;
import android.telephony.satellite.ISatelliteProvisionStateCallback;
-import android.telephony.satellite.ISatelliteStateCallback;
import android.telephony.satellite.ISatelliteTransmissionUpdateCallback;
import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteCapabilities;
@@ -369,13 +369,6 @@
// which is used to send and receive satellite datagrams.
mDatagramController = DatagramController.make(mContext, looper, mPointingAppController);
- requestIsSatelliteSupported(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
- new ResultReceiver(this) {
- @Override
- protected void onReceiveResult(int resultCode, Bundle resultData) {
- logd("requestIsSatelliteSupported: resultCode=" + resultCode);
- }
- });
mCi.registerForRadioStateChanged(this, EVENT_RADIO_STATE_CHANGED, null);
mIsRadioOn = phone.isRadioOn();
registerForSatelliteProvisionStateChanged();
@@ -1014,22 +1007,6 @@
case EVENT_RADIO_STATE_CHANGED: {
if (mCi.getRadioState() == TelephonyManager.RADIO_POWER_ON) {
mIsRadioOn = true;
- if (!mSatelliteModemInterface.isSatelliteServiceSupported()) {
- synchronized (mIsSatelliteSupportedLock) {
- if (mIsSatelliteSupported == null) {
- ResultReceiver receiver = new ResultReceiver(this) {
- @Override
- protected void onReceiveResult(
- int resultCode, Bundle resultData) {
- logd("requestIsSatelliteSupported: resultCode="
- + resultCode);
- }
- };
- requestIsSatelliteSupported(
- SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, receiver);
- }
- }
- }
}
break;
}
@@ -1682,7 +1659,7 @@
* @return The {@link SatelliteManager.SatelliteResult} result of the operation.
*/
@SatelliteManager.SatelliteResult public int registerForSatelliteModemStateChanged(int subId,
- @NonNull ISatelliteStateCallback callback) {
+ @NonNull ISatelliteModemStateCallback callback) {
if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
logd("registerForSatelliteModemStateChanged: oemEnabledSatelliteFlag is disabled");
return SatelliteManager.SATELLITE_RESULT_NOT_SUPPORTED;
@@ -1703,10 +1680,10 @@
*
* @param subId The subId of the subscription to unregister for satellite modem state changed.
* @param callback The callback that was passed to
- * {@link #registerForSatelliteModemStateChanged(int, ISatelliteStateCallback)}.
+ * {@link #registerForSatelliteModemStateChanged(int, ISatelliteModemStateCallback)}.
*/
public void unregisterForSatelliteModemStateChanged(int subId,
- @NonNull ISatelliteStateCallback callback) {
+ @NonNull ISatelliteModemStateCallback callback) {
if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
logd("unregisterForSatelliteModemStateChanged: oemEnabledSatelliteFlag is disabled");
return;
@@ -1714,7 +1691,7 @@
if (mSatelliteSessionController != null) {
mSatelliteSessionController.unregisterForSatelliteModemStateChanged(callback);
} else {
- loge("registerForSatelliteModemStateChanged: mSatelliteSessionController"
+ loge("unregisterForSatelliteModemStateChanged: mSatelliteSessionController"
+ " is not initialized yet");
}
}
@@ -2266,8 +2243,8 @@
@Override
protected void onReceiveResult(
int resultCode, Bundle resultData) {
- logd("requestIsSatelliteSupported: resultCode="
- + resultCode);
+ logd("onSatelliteServiceConnected.requestIsSatelliteSupported:"
+ + " resultCode=" + resultCode);
}
};
requestIsSatelliteSupported(
@@ -2490,7 +2467,8 @@
new ResultReceiver(this) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
- logd("requestIsSatelliteSupported: resultCode=" + resultCode);
+ logd("isSatelliteSupportedViaOemInternal.requestIsSatelliteSupported:"
+ + " resultCode=" + resultCode);
}
});
return null;
@@ -3282,11 +3260,13 @@
return SatelliteManager.SATELLITE_RESULT_REQUEST_NOT_SUPPORTED;
}
if (!mSatelliteModemInterface.isSatelliteServiceSupported()) {
+ logd("evaluateOemSatelliteRequestAllowed: satellite service is not supported");
return SatelliteManager.SATELLITE_RESULT_REQUEST_NOT_SUPPORTED;
}
Boolean satelliteSupported = isSatelliteSupportedViaOemInternal();
if (satelliteSupported == null) {
+ logd("evaluateOemSatelliteRequestAllowed: satelliteSupported is null");
return SatelliteManager.SATELLITE_RESULT_INVALID_TELEPHONY_STATE;
}
if (!satelliteSupported) {
@@ -3296,6 +3276,7 @@
if (isProvisionRequired) {
Boolean satelliteProvisioned = isSatelliteViaOemProvisioned();
if (satelliteProvisioned == null) {
+ logd("evaluateOemSatelliteRequestAllowed: satelliteProvisioned is null");
return SatelliteManager.SATELLITE_RESULT_INVALID_TELEPHONY_STATE;
}
if (!satelliteProvisioned) {
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
index f40880b..aabf826 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommender.java
@@ -23,8 +23,6 @@
import static android.telephony.TelephonyManager.EXTRA_EMERGENCY_CALL_TO_SATELLITE_LAUNCH_INTENT;
import static android.telephony.satellite.SatelliteManager.EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS;
import static android.telephony.satellite.SatelliteManager.EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911;
-import static android.telephony.satellite.SatelliteManager.KEY_SATELLITE_COMMUNICATION_ALLOWED;
-import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SUCCESS;
import static com.android.internal.telephony.satellite.SatelliteController.INVALID_EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE;
@@ -39,7 +37,7 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.os.ResultReceiver;
+import android.os.OutcomeReceiver;
import android.os.SystemProperties;
import android.provider.DeviceConfig;
import android.telecom.Connection;
@@ -51,6 +49,7 @@
import android.telephony.ims.ImsRegistrationAttributes;
import android.telephony.ims.RegistrationManager;
import android.telephony.satellite.ISatelliteProvisionStateCallback;
+import android.telephony.satellite.SatelliteManager;
import android.text.TextUtils;
import android.util.Pair;
import android.util.SparseArray;
@@ -58,6 +57,7 @@
import com.android.ims.ImsException;
import com.android.ims.ImsManager;
import com.android.internal.R;
+import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
@@ -83,6 +83,7 @@
private static final int EVENT_SATELLITE_PROVISIONED_STATE_CHANGED = 4;
private static final int EVENT_EMERGENCY_CALL_CONNECTION_STATE_CHANGED = 5;
private static final int CMD_SEND_EVENT_DISPLAY_EMERGENCY_MESSAGE_FORCEFULLY = 6;
+ private static final int EVENT_SATELLITE_ACCESS_RESTRICTION_CHECKING_RESULT = 7;
@NonNull private final Context mContext;
@NonNull
@@ -94,12 +95,17 @@
/** Key: Phone ID; Value: IMS RegistrationCallback */
private SparseArray<RegistrationManager.RegistrationCallback>
mImsRegistrationCallbacks = new SparseArray<>();
- private AtomicBoolean mIsSatelliteAllowedInCurrentLocation = new AtomicBoolean();
- private final ResultReceiver mReceiverForRequestIsSatelliteAllowedForCurrentLocation;
+ @GuardedBy("mLock")
+ private boolean mIsSatelliteAllowedForCurrentLocation = false;
+ @GuardedBy("mLock")
+ private boolean mCheckingAccessRestrictionInProgress = false;
private final long mTimeoutMillis;
private final AtomicBoolean mIsSatelliteConnectedViaCarrierWithinHysteresisTime =
new AtomicBoolean(false);
+ @GuardedBy("mLock")
+ private boolean mIsTimerTimedOut = false;
protected int mCountOfTimerStarted = 0;
+ private final Object mLock = new Object();
/**
* Create an instance of SatelliteSOSMessageRecommender.
@@ -139,31 +145,6 @@
sendMessage(obtainMessage(EVENT_SATELLITE_PROVISIONED_STATE_CHANGED, provisioned));
}
};
- mReceiverForRequestIsSatelliteAllowedForCurrentLocation = new ResultReceiver(this) {
- @Override
- protected void onReceiveResult(int resultCode, Bundle resultData) {
- if (resultCode == SATELLITE_RESULT_SUCCESS) {
- if (resultData.containsKey(KEY_SATELLITE_COMMUNICATION_ALLOWED)) {
- boolean isSatelliteCommunicationAllowed =
- resultData.getBoolean(KEY_SATELLITE_COMMUNICATION_ALLOWED);
- mIsSatelliteAllowedInCurrentLocation.set(isSatelliteCommunicationAllowed);
- if (!isSatelliteCommunicationAllowed) {
- logd("Satellite is not allowed for current location.");
- cleanUpResources();
- }
- } else {
- loge("KEY_SATELLITE_COMMUNICATION_ALLOWED does not exist.");
- mIsSatelliteAllowedInCurrentLocation.set(false);
- cleanUpResources();
- }
- } else {
- loge("requestIsSatelliteCommunicationAllowedForCurrentLocation() resultCode="
- + resultCode);
- mIsSatelliteAllowedInCurrentLocation.set(false);
- cleanUpResources();
- }
- }
- };
}
@Override
@@ -187,6 +168,9 @@
case CMD_SEND_EVENT_DISPLAY_EMERGENCY_MESSAGE_FORCEFULLY:
handleCmdSendEventDisplayEmergencyMessageForcefully((Connection) msg.obj);
break;
+ case EVENT_SATELLITE_ACCESS_RESTRICTION_CHECKING_RESULT:
+ handleSatelliteAccessRestrictionCheckingResult((boolean) msg.obj);
+ break;
default:
logd("handleMessage: unexpected message code: " + msg.what);
break;
@@ -206,7 +190,7 @@
return;
}
- /**
+ /*
* Right now, assume that the device is connected to satellite via carrier within hysteresis
* time. However, this might not be correct when the monitoring timer expires. Thus, we
* should do this check now so that we have higher chance of sending the event
@@ -226,6 +210,7 @@
*/
public void onEmergencyCallConnectionStateChanged(
String callId, @Connection.ConnectionState int state) {
+ logd("callId=" + callId + ", state=" + state);
if (!mSatelliteController.isSatelliteSupportedViaOem()
&& !mSatelliteController.isSatelliteSupportedViaCarrier()) {
logd("onEmergencyCallConnectionStateChanged: satellite is not supported");
@@ -245,13 +230,14 @@
return;
}
if (mEmergencyConnection == null) {
- mSatelliteController.requestIsSatelliteCommunicationAllowedForCurrentLocation(
- SubscriptionManager.DEFAULT_SUBSCRIPTION_ID,
- mReceiverForRequestIsSatelliteAllowedForCurrentLocation);
handleStateChangedEventForHysteresisTimer();
registerForInterestedStateChangedEvents();
}
mEmergencyConnection = connection;
+ synchronized (mLock) {
+ mCheckingAccessRestrictionInProgress = false;
+ mIsSatelliteAllowedForCurrentLocation = false;
+ }
}
private void handleSatelliteProvisionStateChangedEvent(boolean provisioned) {
@@ -261,32 +247,59 @@
}
private void handleTimeoutEvent() {
- /**
- * The device might be connected to satellite after the emergency call started. Thus, we
- * need to do this check again so that we will have higher chance of sending the event
- * EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer.
- */
- updateSatelliteViaCarrierAvailability();
-
- boolean isDialerNotified = false;
- if (!isImsRegistered() && !isCellularAvailable()
- && mIsSatelliteAllowedInCurrentLocation.get()
- && (isSatelliteViaOemAvailable() || isSatelliteViaCarrierAvailable())
- && shouldTrackCall(mEmergencyConnection.getState())) {
- logd("handleTimeoutEvent: Sent EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer");
- Bundle extras = createExtraBundleForEventDisplayEmergencyMessage();
- mEmergencyConnection.sendConnectionEvent(
- TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE, extras);
- isDialerNotified = true;
-
+ synchronized (mLock) {
+ mIsTimerTimedOut = true;
+ evaluateSendingConnectionEventDisplayEmergencyMessage();
}
- logd("handleTimeoutEvent: isImsRegistered=" + isImsRegistered()
- + ", isCellularAvailable=" + isCellularAvailable()
- + ", mIsSatelliteAllowedInCurrentLocation="
- + mIsSatelliteAllowedInCurrentLocation.get()
- + ", shouldTrackCall=" + shouldTrackCall(mEmergencyConnection.getState()));
- reportEsosRecommenderDecision(isDialerNotified);
- cleanUpResources();
+ }
+
+ private void evaluateSendingConnectionEventDisplayEmergencyMessage() {
+ synchronized (mLock) {
+ if (mEmergencyConnection == null) {
+ loge("No emergency call is ongoing...");
+ return;
+ }
+
+ if (!mIsTimerTimedOut || mCheckingAccessRestrictionInProgress) {
+ logd("mIsTimerTimedOut=" + mIsTimerTimedOut
+ + ", mCheckingAccessRestrictionInProgress="
+ + mCheckingAccessRestrictionInProgress);
+ return;
+ }
+
+ /*
+ * The device might be connected to satellite after the emergency call started. Thus, we
+ * need to do this check again so that we will have higher chance of sending the event
+ * EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer.
+ */
+ updateSatelliteViaCarrierAvailability();
+
+ boolean isDialerNotified = false;
+ if (!isImsRegistered() && !isCellularAvailable()
+ && isSatelliteAllowed()
+ && (isSatelliteViaOemAvailable() || isSatelliteViaCarrierAvailable())
+ && shouldTrackCall(mEmergencyConnection.getState())) {
+ logd("handleTimeoutEvent: Sent EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer");
+ Bundle extras = createExtraBundleForEventDisplayEmergencyMessage();
+ mEmergencyConnection.sendConnectionEvent(
+ TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE, extras);
+ isDialerNotified = true;
+
+ }
+ logd("handleTimeoutEvent: isImsRegistered=" + isImsRegistered()
+ + ", isCellularAvailable=" + isCellularAvailable()
+ + ", isSatelliteAllowed=" + isSatelliteAllowed()
+ + ", shouldTrackCall=" + shouldTrackCall(mEmergencyConnection.getState()));
+ reportEsosRecommenderDecision(isDialerNotified);
+ cleanUpResources();
+ }
+ }
+
+ private boolean isSatelliteAllowed() {
+ synchronized (mLock) {
+ if (isSatelliteViaCarrierAvailable()) return true;
+ return mIsSatelliteAllowedForCurrentLocation;
+ }
}
private void updateSatelliteViaCarrierAvailability() {
@@ -317,7 +330,7 @@
loge("handleEmergencyCallConnectionStateChangedEvent: unexpected state changed event "
+ ", mEmergencyConnection=" + mEmergencyConnection + ", callId=" + callId
+ ", state=" + state);
- /**
+ /*
* TelephonyConnectionService sent us a connection state changed event for a call that
* we're not tracking. There must be some unexpected things happened in
* TelephonyConnectionService. Thus, we need to clean up the resources.
@@ -329,6 +342,13 @@
if (!shouldTrackCall(state)) {
reportEsosRecommenderDecision(false);
cleanUpResources();
+ } else {
+ // Location service will enter emergency mode only when connection state changes to
+ // STATE_DIALING
+ if (state == Connection.STATE_DIALING
+ && mSatelliteController.isSatelliteSupportedViaOem()) {
+ requestIsSatelliteAllowedForCurrentLocation();
+ }
}
}
@@ -341,18 +361,22 @@
.setCellularServiceState(getBestCellularServiceState())
.setIsMultiSim(isMultiSim())
.setRecommendingHandoverType(getEmergencyCallToSatelliteHandoverType())
- .setIsSatelliteAllowedInCurrentLocation(
- mIsSatelliteAllowedInCurrentLocation.get())
+ .setIsSatelliteAllowedInCurrentLocation(isSatelliteAllowed())
.build());
}
private void cleanUpResources() {
- stopTimer();
- if (mEmergencyConnection != null) {
- unregisterForInterestedStateChangedEvents();
+ synchronized (mLock) {
+ stopTimer();
+ if (mEmergencyConnection != null) {
+ unregisterForInterestedStateChangedEvents();
+ }
+ mEmergencyConnection = null;
+ mCountOfTimerStarted = 0;
+ mIsTimerTimedOut = false;
+ mCheckingAccessRestrictionInProgress = false;
+ mIsSatelliteAllowedForCurrentLocation = false;
}
- mEmergencyConnection = null;
- mCountOfTimerStarted = 0;
}
private void registerForInterestedStateChangedEvents() {
@@ -450,15 +474,28 @@
}
private void startTimer() {
- if (hasMessages(EVENT_TIME_OUT)) {
- return;
+ synchronized (mLock) {
+ if (hasMessages(EVENT_TIME_OUT)) {
+ return;
+ }
+ sendMessageDelayed(obtainMessage(EVENT_TIME_OUT), mTimeoutMillis);
+ mCountOfTimerStarted++;
+ mIsTimerTimedOut = false;
}
- sendMessageDelayed(obtainMessage(EVENT_TIME_OUT), mTimeoutMillis);
- mCountOfTimerStarted++;
}
private void stopTimer() {
- removeMessages(EVENT_TIME_OUT);
+ synchronized (mLock) {
+ removeMessages(EVENT_TIME_OUT);
+ }
+ }
+
+ private void handleSatelliteAccessRestrictionCheckingResult(boolean satelliteAllowed) {
+ synchronized (mLock) {
+ mIsSatelliteAllowedForCurrentLocation = satelliteAllowed;
+ mCheckingAccessRestrictionInProgress = false;
+ evaluateSendingConnectionEventDisplayEmergencyMessage();
+ }
}
private static long getEmergencyCallWaitForConnectionTimeoutMillis(@NonNull Context context) {
@@ -627,6 +664,42 @@
}
}
+ private void requestIsSatelliteAllowedForCurrentLocation() {
+ synchronized (mLock) {
+ if (mCheckingAccessRestrictionInProgress) {
+ logd("requestIsSatelliteCommunicationAllowedForCurrentLocation was already sent");
+ return;
+ }
+ mCheckingAccessRestrictionInProgress = true;
+ }
+
+ OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> callback =
+ new OutcomeReceiver<>() {
+ @Override
+ public void onResult(Boolean result) {
+ logd("requestIsSatelliteAllowedForCurrentLocation: result=" + result);
+ sendMessage(obtainMessage(
+ EVENT_SATELLITE_ACCESS_RESTRICTION_CHECKING_RESULT, result));
+ }
+
+ @Override
+ public void onError(SatelliteManager.SatelliteException ex) {
+ logd("requestIsSatelliteAllowedForCurrentLocation: onError, ex=" + ex);
+ sendMessage(obtainMessage(
+ EVENT_SATELLITE_ACCESS_RESTRICTION_CHECKING_RESULT, false));
+ }
+ };
+ requestIsSatelliteCommunicationAllowedForCurrentLocation(callback);
+ }
+
+ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+ protected void requestIsSatelliteCommunicationAllowedForCurrentLocation(
+ @NonNull OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> callback) {
+ SatelliteManager satelliteManager = mContext.getSystemService(SatelliteManager.class);
+ satelliteManager.requestIsSatelliteCommunicationAllowedForCurrentLocation(
+ this::post, callback);
+ }
+
private static boolean isMockModemAllowed() {
return (SystemProperties.getBoolean(ALLOW_MOCK_MODEM_PROPERTY, false)
|| SystemProperties.getBoolean(BOOT_ALLOW_MOCK_MODEM_PROPERTY, false));
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java b/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
index d0497eb..541a029 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
@@ -40,7 +40,7 @@
import android.os.RemoteException;
import android.os.SystemProperties;
import android.telephony.Rlog;
-import android.telephony.satellite.ISatelliteStateCallback;
+import android.telephony.satellite.ISatelliteModemStateCallback;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.stub.ISatelliteGateway;
import android.telephony.satellite.stub.SatelliteGatewayService;
@@ -130,7 +130,7 @@
private long mSatelliteStayAtListeningFromSendingMillis;
private long mSatelliteStayAtListeningFromReceivingMillis;
private long mSatelliteNbIotInactivityTimeoutMillis;
- private final ConcurrentHashMap<IBinder, ISatelliteStateCallback> mListeners;
+ private final ConcurrentHashMap<IBinder, ISatelliteModemStateCallback> mListeners;
@SatelliteManager.SatelliteModemState private int mCurrentState;
final boolean mIsSatelliteSupported;
private boolean mIsDemoMode = false;
@@ -272,7 +272,8 @@
*
* @param callback The callback to handle the satellite modem state changed event.
*/
- public void registerForSatelliteModemStateChanged(@NonNull ISatelliteStateCallback callback) {
+ public void registerForSatelliteModemStateChanged(
+ @NonNull ISatelliteModemStateCallback callback) {
try {
callback.onSatelliteModemStateChanged(mCurrentState);
mListeners.put(callback.asBinder(), callback);
@@ -286,9 +287,10 @@
* If callback was not registered before, the request will be ignored.
*
* @param callback The callback that was passed to
- * {@link #registerForSatelliteModemStateChanged(ISatelliteStateCallback)}.
+ * {@link #registerForSatelliteModemStateChanged(ISatelliteModemStateCallback)}.
*/
- public void unregisterForSatelliteModemStateChanged(@NonNull ISatelliteStateCallback callback) {
+ public void unregisterForSatelliteModemStateChanged(
+ @NonNull ISatelliteModemStateCallback callback) {
mListeners.remove(callback.asBinder());
}
@@ -809,7 +811,7 @@
private void notifyStateChangedEvent(@SatelliteManager.SatelliteModemState int state) {
mDatagramController.onSatelliteModemStateChanged(state);
- List<ISatelliteStateCallback> toBeRemoved = new ArrayList<>();
+ List<ISatelliteModemStateCallback> toBeRemoved = new ArrayList<>();
mListeners.values().forEach(listener -> {
try {
listener.onSatelliteModemStateChanged(state);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
index ed86e5f..3962565 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaPhoneTest.java
@@ -23,6 +23,7 @@
import static com.android.internal.telephony.Phone.EVENT_RADIO_AVAILABLE;
import static com.android.internal.telephony.Phone.EVENT_SET_IDENTIFIER_DISCLOSURE_ENABLED_DONE;
import static com.android.internal.telephony.Phone.EVENT_SET_NULL_CIPHER_AND_INTEGRITY_DONE;
+import static com.android.internal.telephony.Phone.EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE;
import static com.android.internal.telephony.Phone.EVENT_SRVCC_STATE_CHANGED;
import static com.android.internal.telephony.Phone.EVENT_UICC_APPS_ENABLEMENT_STATUS_CHANGED;
import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;
@@ -2789,7 +2790,7 @@
@Test
public void testCellularIdentifierDisclosureFlagOff() {
- when(mFeatureFlags.enableIdentifierDisclosureTransparency()).thenReturn(false);
+ when(mFeatureFlags.enableIdentifierDisclosureTransparencyUnsolEvents()).thenReturn(false);
GsmCdmaPhone phoneUT =
new GsmCdmaPhone(
@@ -2811,7 +2812,7 @@
@Test
public void testCellularIdentifierDisclosureFlagOn() {
- when(mFeatureFlags.enableIdentifierDisclosureTransparency()).thenReturn(true);
+ when(mFeatureFlags.enableIdentifierDisclosureTransparencyUnsolEvents()).thenReturn(true);
Phone phoneUT =
new GsmCdmaPhone(
@@ -2834,7 +2835,7 @@
@Test
public void testCellularIdentifierDisclosure_disclosureEventAddedToNotifier() {
- when(mFeatureFlags.enableIdentifierDisclosureTransparency()).thenReturn(true);
+ when(mFeatureFlags.enableIdentifierDisclosureTransparencyUnsolEvents()).thenReturn(true);
Phone phoneUT =
new GsmCdmaPhone(
@@ -2865,7 +2866,7 @@
@Test
public void testCellularIdentifierDisclosure_disclosureEventNull() {
- when(mFeatureFlags.enableIdentifierDisclosureTransparency()).thenReturn(true);
+ when(mFeatureFlags.enableIdentifierDisclosureTransparencyUnsolEvents()).thenReturn(true);
Phone phoneUT =
new GsmCdmaPhone(
@@ -2930,7 +2931,7 @@
sendRadioAvailableToPhone(phoneUT);
verify(mMockCi, times(1)).setCellularIdentifierTransparencyEnabled(anyBoolean(),
any(Message.class));
- sendIdentifierDisclosureEnabledSuccessToPhone(phoneUT);
+ sendRequestSuccessToPhone(phoneUT, EVENT_SET_IDENTIFIER_DISCLOSURE_ENABLED_DONE);
assertTrue(phoneUT.isIdentifierDisclosureTransparencySupported());
}
@@ -2977,6 +2978,48 @@
verify(mNullCipherNotifier, times(1)).onSecurityAlgorithmUpdate(eq(0), eq(update));
}
+ @Test
+ public void testNullCipherNotification_noModemCallOnRadioAvailable_FlagOff() {
+ when(mFeatureFlags.enableModemCipherTransparency()).thenReturn(false);
+ GsmCdmaPhone phoneUT = makeNewPhoneUT();
+ assertFalse(phoneUT.isNullCipherNotificationSupported());
+
+ sendRadioAvailableToPhone(phoneUT);
+
+ verify(mMockCi, never()).setSecurityAlgorithmsUpdatedEnabled(anyBoolean(),
+ any(Message.class));
+ assertFalse(phoneUT.isNullCipherNotificationSupported());
+ }
+
+ @Test
+ public void testNullCipherNotification_unsupportedByModemOnRadioAvailable() {
+ when(mFeatureFlags.enableModemCipherTransparency()).thenReturn(true);
+ GsmCdmaPhone phoneUT = makeNewPhoneUT();
+ assertFalse(phoneUT.isNullCipherNotificationSupported());
+
+ sendRadioAvailableToPhone(phoneUT);
+ verify(mMockCi, times(1)).setSecurityAlgorithmsUpdatedEnabled(anyBoolean(),
+ any(Message.class));
+ sendRequestNotSupportedToPhone(phoneUT, EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE);
+
+ assertFalse(phoneUT.isNullCipherNotificationSupported());
+ }
+
+ @Test
+ public void testNullCipherNotification_supportedByModem() {
+ when(mFeatureFlags.enableModemCipherTransparency()).thenReturn(true);
+ GsmCdmaPhone phoneUT = makeNewPhoneUT();
+ assertFalse(phoneUT.isNullCipherNotificationSupported());
+
+ sendRadioAvailableToPhone(phoneUT);
+ verify(mMockCi, times(1)).setSecurityAlgorithmsUpdatedEnabled(anyBoolean(),
+ any(Message.class));
+ sendRequestSuccessToPhone(phoneUT, EVENT_SET_SECURITY_ALGORITHMS_UPDATED_ENABLED_DONE);
+
+ assertTrue(phoneUT.isNullCipherNotificationSupported());
+ }
+
+
private void sendRadioAvailableToPhone(GsmCdmaPhone phone) {
phone.sendMessage(phone.obtainMessage(EVENT_RADIO_AVAILABLE,
new AsyncResult(null, new int[]{ServiceState.RIL_RADIO_TECHNOLOGY_GSM}, null)));
@@ -2989,9 +3032,8 @@
processAllMessages();
}
- private void sendIdentifierDisclosureEnabledSuccessToPhone(GsmCdmaPhone phone) {
- phone.sendMessage(phone.obtainMessage(EVENT_SET_IDENTIFIER_DISCLOSURE_ENABLED_DONE,
- new AsyncResult(null, null, null)));
+ private void sendRequestSuccessToPhone(GsmCdmaPhone phone, int eventId) {
+ phone.sendMessage(phone.obtainMessage(eventId, new AsyncResult(null, null, null)));
processAllMessages();
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccCardControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccCardControllerTest.java
index 242c9f8..11d3f14 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccCardControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccCardControllerTest.java
@@ -146,8 +146,8 @@
@Test
public void testIsEmbeddedSlotActivated() {
- mEuiccCardController =
- new EuiccCardController(mContext, null, mEuiccController, mUiccController);
+ mEuiccCardController = new EuiccCardController(mContext, null, mEuiccController,
+ mUiccController, mFeatureFlags);
when(mUiccController.getUiccSlots())
.thenReturn(new UiccSlot[] {mActivatedRemovableSlot});
assertFalse(mEuiccCardController.isEmbeddedSlotActivated());
@@ -173,8 +173,8 @@
@Test
public void testIsEmbeddedCardPresent() {
- mEuiccCardController =
- new EuiccCardController(mContext, null, mEuiccController, mUiccController);
+ mEuiccCardController = new EuiccCardController(mContext, null, mEuiccController,
+ mUiccController, mFeatureFlags);
when(mUiccController.getUiccSlots())
.thenReturn(new UiccSlot[] {mActivatedRemovableSlot});
assertFalse(mEuiccCardController.isEmbeddedCardPresent());
@@ -204,8 +204,8 @@
mSp.edit().remove(KEY_LAST_BOOT_COUNT);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.BOOT_COUNT, 0);
when(mUiccController.getUiccSlots()).thenReturn(new UiccSlot[] {mActivatedEsimSlot});
- mEuiccCardController =
- new EuiccCardController(mContext, null, mEuiccController, mUiccController);
+ mEuiccCardController = new EuiccCardController(mContext, null, mEuiccController,
+ mUiccController, mFeatureFlags);
mContext.sendBroadcast(new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED));
processAllMessages();
@@ -218,8 +218,8 @@
mSp.edit().remove(KEY_LAST_BOOT_COUNT);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.BOOT_COUNT, 0);
when(mUiccController.getUiccSlots()).thenReturn(new UiccSlot[] {mNotPresentEsimSlot});
- mEuiccCardController =
- new EuiccCardController(mContext, null, mEuiccController, mUiccController);
+ mEuiccCardController = new EuiccCardController(mContext, null, mEuiccController,
+ mUiccController, mFeatureFlags);
mContext.sendBroadcast(new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED));
processAllMessages();
@@ -232,8 +232,8 @@
mSp.edit().putInt(KEY_LAST_BOOT_COUNT, 1).apply();
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.BOOT_COUNT, 1);
when(mUiccController.getUiccSlots()).thenReturn(new UiccSlot[] {mActivatedEsimSlot});
- mEuiccCardController =
- new EuiccCardController(mContext, null, mEuiccController, mUiccController);
+ mEuiccCardController = new EuiccCardController(mContext, null, mEuiccController,
+ mUiccController, mFeatureFlags);
mContext.sendBroadcast(new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED));
processAllMessages();
@@ -247,8 +247,8 @@
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.BOOT_COUNT, 0);
when(mUiccController.getUiccSlots())
.thenReturn(new UiccSlot[] {mActivatedRemovableSlot, mInactivatedEsimSlot});
- mEuiccCardController =
- new EuiccCardController(mContext, null, mEuiccController, mUiccController);
+ mEuiccCardController = new EuiccCardController(mContext, null, mEuiccController,
+ mUiccController, mFeatureFlags);
mContext.sendBroadcast(new Intent(TelephonyManager.ACTION_SIM_SLOT_STATUS_CHANGED));
processAllMessages();
diff --git a/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccControllerTest.java
index fc8dfbf..a493247 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/euicc/EuiccControllerTest.java
@@ -23,6 +23,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
@@ -70,6 +71,7 @@
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.euicc.EuiccConnector.GetOtaStatusCommandCallback;
import com.android.internal.telephony.euicc.EuiccConnector.OtaStatusChangedCallback;
+import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.uicc.UiccSlot;
import libcore.junit.util.compat.CoreCompatChangeRule.DisableCompatChanges;
@@ -156,8 +158,8 @@
// Number of OTA status changed.
private int mNumOtaStatusChanged;
- TestEuiccController(Context context, EuiccConnector connector) {
- super(context, connector);
+ TestEuiccController(Context context, EuiccConnector connector, FeatureFlags featureFlags) {
+ super(context, connector, featureFlags);
mNumOtaStatusChanged = 0;
}
@@ -196,7 +198,7 @@
super.setUp(getClass().getSimpleName());
mMockConnector = Mockito.mock(EuiccConnector.class);
mUiccSlot = Mockito.mock(UiccSlot.class);
- mController = new TestEuiccController(mContext, mMockConnector);
+ mController = new TestEuiccController(mContext, mMockConnector, mFeatureFlags);
PackageInfo pi = new PackageInfo();
pi.packageName = PACKAGE_NAME;
@@ -1295,6 +1297,30 @@
}
@Test
+ @EnableCompatChanges({EuiccManager.INACTIVE_PORT_AVAILABILITY_CHECK,
+ TelephonyManager.ENABLE_FEATURE_MAPPING})
+ public void testIsSimPortAvailable_WithTelephonyFeatureMapping() {
+ // Feature flag enabled, device has required telephony feature.
+ doReturn(true).when(mFeatureFlags).enforceTelephonyFeatureMappingForPublicApis();
+ doReturn(true).when(mPackageManager).hasSystemFeature(
+ eq(PackageManager.FEATURE_TELEPHONY_EUICC));
+
+ setUiccCardInfos(false, true, true);
+
+ // assert non euicc card id
+ assertFalse(mController.isSimPortAvailable(REMOVABLE_CARD_ID, 0, TEST_PACKAGE_NAME));
+
+ // assert invalid port index
+ assertFalse(mController.isSimPortAvailable(CARD_ID, 5 /* portIndex */, TEST_PACKAGE_NAME));
+
+ // Device does not have required telephony feature.
+ doReturn(false).when(mPackageManager).hasSystemFeature(
+ eq(PackageManager.FEATURE_TELEPHONY_EUICC));
+ assertThrows(UnsupportedOperationException.class,
+ () -> mController.isSimPortAvailable(REMOVABLE_CARD_ID, 0, TEST_PACKAGE_NAME));
+ }
+
+ @Test
@EnableCompatChanges({EuiccManager.INACTIVE_PORT_AVAILABILITY_CHECK})
public void testIsSimPortAvailable_invalidCase() {
setUiccCardInfos(false, true, true);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
index dbfe169..6496efb 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
@@ -22,7 +22,7 @@
import static android.telephony.CarrierConfigManager.USSD_OVER_IMS_ONLY;
import static android.telephony.CarrierConfigManager.USSD_OVER_IMS_PREFERRED;
import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_NONE;
-import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCK;
+import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCKS;
import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_PLMN_BLOCK;
import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_PLMN_BLOCK_WITH_TIMEOUT;
import static android.telephony.ims.RegistrationManager.SUGGESTED_ACTION_TRIGGER_RAT_BLOCK;
@@ -63,6 +63,7 @@
import android.app.Activity;
import android.content.BroadcastReceiver;
+import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
@@ -819,6 +820,37 @@
}
@Test
+ @SmallTest
+ public void testSetWfcModeInRoaming() throws Exception {
+ doReturn(true).when(mFeatureFlags).updateRoamingStateToSetWfcMode();
+ doReturn(PhoneConstants.State.IDLE).when(mImsCT).getState();
+ doReturn(true).when(mPhone).isRadioOn();
+
+ // Set CarrierConfigManager to be invalid
+ doReturn(null).when(mContext).getSystemService(Context.CARRIER_CONFIG_SERVICE);
+
+ //Roaming - data registration only on LTE
+ Message m = getServiceStateChangedMessage(getServiceStateDataOnly(
+ ServiceState.RIL_RADIO_TECHNOLOGY_LTE, ServiceState.STATE_IN_SERVICE, true));
+ // Inject the message synchronously instead of waiting for the thread to do it.
+ mImsPhoneUT.handleMessage(m);
+ m.recycle();
+
+ verify(mImsManager, never()).setWfcMode(anyInt(), eq(true));
+
+ // Set CarrierConfigManager to be valid
+ doReturn(mCarrierConfigManager).when(mContext)
+ .getSystemService(Context.CARRIER_CONFIG_SERVICE);
+
+ m = getServiceStateChangedMessage(getServiceStateDataOnly(
+ ServiceState.RIL_RADIO_TECHNOLOGY_LTE, ServiceState.STATE_IN_SERVICE, true));
+ mImsPhoneUT.handleMessage(m);
+ m.recycle();
+
+ verify(mImsManager, times(1)).setWfcMode(anyInt(), eq(true));
+ }
+
+ @Test
public void testNonNullTrackersInImsPhone() throws Exception {
assertNotNull(mImsPhoneUT.getEmergencyNumberTracker());
assertNotNull(mImsPhoneUT.getServiceStateTracker());
@@ -1531,13 +1563,13 @@
// unregistered with rat block clear
registrationCallback.onUnregistered(reasonInfo,
- SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCK,
+ SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCKS,
REGISTRATION_TECH_LTE);
regInfo = mSimulatedCommands.getImsRegistrationInfo();
assertTrue(regInfo[0] == RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED
&& regInfo[1] == REGISTRATION_TECH_LTE
- && regInfo[2] == SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCK);
+ && regInfo[2] == SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCKS);
// reset the registration info saved in the SimulatedCommands
mSimulatedCommands.updateImsRegistrationInfo(0, 0, 0, 0, null);
@@ -1547,13 +1579,13 @@
// verfies that duplicated notification with the same suggested action is invoked
registrationCallback.onUnregistered(reasonInfo,
- SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCK,
+ SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCKS,
REGISTRATION_TECH_LTE);
regInfo = mSimulatedCommands.getImsRegistrationInfo();
assertTrue(regInfo[0] == RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED
&& regInfo[1] == REGISTRATION_TECH_LTE
- && regInfo[2] == SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCK);
+ && regInfo[2] == SUGGESTED_ACTION_TRIGGER_CLEAR_RAT_BLOCKS);
}
@Test
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
index 55532cc..685578c 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -101,8 +101,8 @@
import android.telephony.satellite.INtnSignalStrengthCallback;
import android.telephony.satellite.ISatelliteCapabilitiesCallback;
import android.telephony.satellite.ISatelliteDatagramCallback;
+import android.telephony.satellite.ISatelliteModemStateCallback;
import android.telephony.satellite.ISatelliteProvisionStateCallback;
-import android.telephony.satellite.ISatelliteStateCallback;
import android.telephony.satellite.ISatelliteTransmissionUpdateCallback;
import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteCapabilities;
@@ -212,6 +212,7 @@
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
mQueriedSatelliteCapabilitiesResultCode = resultCode;
+ logd("mSatelliteCapabilitiesReceiver: resultCode=" + resultCode);
if (resultCode == SATELLITE_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_SATELLITE_CAPABILITIES)) {
mQueriedSatelliteCapabilities = resultData.getParcelable(
@@ -221,13 +222,13 @@
mQueriedSatelliteCapabilities = null;
}
} else {
- logd("mSatelliteSupportReceiver: resultCode=" + resultCode);
mQueriedSatelliteCapabilities = null;
}
try {
mSatelliteCapabilitiesSemaphore.release();
} catch (Exception ex) {
- loge("mSatelliteSupportReceiver: Got exception in releasing semaphore, ex=" + ex);
+ loge("mSatelliteCapabilitiesReceiver: Got exception in releasing semaphore, ex="
+ + ex);
}
}
};
@@ -239,6 +240,7 @@
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
mQueriedSatelliteSupportedResultCode = resultCode;
+ logd("mSatelliteSupportReceiver: resultCode=" + resultCode);
if (resultCode == SATELLITE_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_SATELLITE_SUPPORTED)) {
mQueriedSatelliteSupported = resultData.getBoolean(KEY_SATELLITE_SUPPORTED);
@@ -247,7 +249,6 @@
mQueriedSatelliteSupported = false;
}
} else {
- logd("mSatelliteSupportReceiver: resultCode=" + resultCode);
mQueriedSatelliteSupported = false;
}
try {
@@ -279,7 +280,7 @@
try {
mIsSatelliteEnabledSemaphore.release();
} catch (Exception ex) {
- loge("mIsSatelliteEnableReceiver: Got exception in releasing semaphore, ex=" + ex);
+ loge("mIsSatelliteEnabledReceiver: Got exception in releasing semaphore, ex=" + ex);
}
}
};
@@ -291,6 +292,7 @@
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
mQueriedIsDemoModeEnabledResultCode = resultCode;
+ logd("mIsDemoModeEnabledReceiver: resultCode=" + resultCode);
if (resultCode == SATELLITE_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_DEMO_MODE_ENABLED)) {
mQueriedIsDemoModeEnabled = resultData.getBoolean(KEY_DEMO_MODE_ENABLED);
@@ -299,7 +301,6 @@
mQueriedIsDemoModeEnabled = false;
}
} else {
- logd("mIsSatelliteEnableReceiver: resultCode=" + resultCode);
mQueriedIsDemoModeEnabled = false;
}
try {
@@ -317,6 +318,7 @@
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
mQueriedIsSatelliteProvisionedResultCode = resultCode;
+ logd("mIsSatelliteProvisionedReceiver: resultCode=" + resultCode);
if (resultCode == SATELLITE_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_SATELLITE_PROVISIONED)) {
mQueriedIsSatelliteProvisioned =
@@ -344,6 +346,7 @@
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
mQueriedSatelliteAllowedResultCode = resultCode;
+ logd("mSatelliteAllowedReceiver: resultCode=" + resultCode);
if (resultCode == SATELLITE_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_SATELLITE_COMMUNICATION_ALLOWED)) {
mQueriedSatelliteAllowed = resultData.getBoolean(
@@ -353,7 +356,6 @@
mQueriedSatelliteAllowed = false;
}
} else {
- logd("mSatelliteAllowedReceiver: resultCode=" + resultCode);
mQueriedSatelliteAllowed = false;
}
try {
@@ -372,6 +374,7 @@
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
mQueriedSatelliteVisibilityTimeResultCode = resultCode;
+ logd("mSatelliteVisibilityTimeReceiver: resultCode=" + resultCode);
if (resultCode == SATELLITE_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_SATELLITE_NEXT_VISIBILITY)) {
mQueriedSatelliteVisibilityTime = resultData.getInt(
@@ -381,13 +384,13 @@
mQueriedSatelliteVisibilityTime = -1;
}
} else {
- logd("mSatelliteSupportReceiver: resultCode=" + resultCode);
mQueriedSatelliteVisibilityTime = -1;
}
try {
mSatelliteVisibilityTimeSemaphore.release();
} catch (Exception ex) {
- loge("mSatelliteAllowedReceiver: Got exception in releasing semaphore, ex=" + ex);
+ loge("mSatelliteVisibilityTimeReceiver: Got exception in releasing semaphore, ex="
+ + ex);
}
}
};
@@ -400,6 +403,7 @@
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
mQueriedNtnSignalStrengthResultCode = resultCode;
+ logd("KEY_NTN_SIGNAL_STRENGTH: resultCode=" + resultCode);
if (resultCode == SATELLITE_RESULT_SUCCESS) {
if (resultData.containsKey(KEY_NTN_SIGNAL_STRENGTH)) {
NtnSignalStrength result = resultData.getParcelable(KEY_NTN_SIGNAL_STRENGTH);
@@ -410,7 +414,6 @@
mQueriedNtnSignalStrengthLevel = NTN_SIGNAL_STRENGTH_NONE;
}
} else {
- logd("KEY_NTN_SIGNAL_STRENGTH: resultCode=" + resultCode);
mQueriedNtnSignalStrengthLevel = NTN_SIGNAL_STRENGTH_NONE;
}
try {
@@ -1197,7 +1200,7 @@
@Test
public void testRegisterForSatelliteModemStateChanged() {
- ISatelliteStateCallback callback = new ISatelliteStateCallback.Stub() {
+ ISatelliteModemStateCallback callback = new ISatelliteModemStateCallback.Stub() {
@Override
public void onSatelliteModemStateChanged(int state) {
logd("onSatelliteModemStateChanged: state=" + state);
@@ -1219,7 +1222,7 @@
@Test
public void testUnregisterForSatelliteModemStateChanged() {
- ISatelliteStateCallback callback = new ISatelliteStateCallback.Stub() {
+ ISatelliteModemStateCallback callback = new ISatelliteModemStateCallback.Stub() {
@Override
public void onSatelliteModemStateChanged(int state) {
logd("onSatelliteModemStateChanged: state=" + state);
@@ -1990,9 +1993,9 @@
@Test
public void testIsSatelliteAttachRequired() {
- mSatelliteCapabilitiesSemaphore.drainPermits();
TestSatelliteController satelliteController =
new TestSatelliteController(mContext, Looper.myLooper(), mFeatureFlags);
+ mSatelliteCapabilitiesSemaphore.drainPermits();
satelliteController.requestSatelliteCapabilities(SUB_ID, mSatelliteCapabilitiesReceiver);
processAllMessages();
assertTrue(waitForRequestSatelliteCapabilitiesResult(1));
@@ -2002,12 +2005,11 @@
setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
setUpResponseForRequestSatelliteCapabilities(
- mSatelliteCapabilities, SATELLITE_RESULT_MODEM_ERROR);
+ mEmptySatelliteCapabilities, SATELLITE_RESULT_SUCCESS);
satelliteController =
new TestSatelliteController(mContext, Looper.myLooper(), mFeatureFlags);
- verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
- setUpResponseForRequestSatelliteCapabilities(
- mEmptySatelliteCapabilities, SATELLITE_RESULT_SUCCESS);
+ verifySatelliteSupported(satelliteController, true, SATELLITE_RESULT_SUCCESS);
+ mSatelliteCapabilitiesSemaphore.drainPermits();
satelliteController.requestSatelliteCapabilities(SUB_ID, mSatelliteCapabilitiesReceiver);
processAllMessages();
assertTrue(waitForRequestSatelliteCapabilitiesResult(1));
@@ -2020,12 +2022,11 @@
setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
setUpResponseForRequestSatelliteCapabilities(
- mSatelliteCapabilities, SATELLITE_RESULT_MODEM_ERROR);
+ mSatelliteCapabilities, SATELLITE_RESULT_SUCCESS);
satelliteController =
new TestSatelliteController(mContext, Looper.myLooper(), mFeatureFlags);
- verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
- setUpResponseForRequestSatelliteCapabilities(
- mSatelliteCapabilities, SATELLITE_RESULT_SUCCESS);
+ verifySatelliteSupported(satelliteController, true, SATELLITE_RESULT_SUCCESS);
+ mSatelliteCapabilitiesSemaphore.drainPermits();
satelliteController.requestSatelliteCapabilities(SUB_ID, mSatelliteCapabilitiesReceiver);
processAllMessages();
assertTrue(waitForRequestSatelliteCapabilitiesResult(1));
@@ -3016,6 +3017,16 @@
assertEquals(supported, mQueriedSatelliteSupported);
}
+ private void verifySatelliteSupported(TestSatelliteController satelliteController,
+ boolean supported, int expectedErrorCode) {
+ mSatelliteSupportSemaphore.drainPermits();
+ satelliteController.requestIsSatelliteSupported(SUB_ID, mSatelliteSupportReceiver);
+ processAllMessages();
+ assertTrue(waitForRequestIsSatelliteSupportedResult(1));
+ assertEquals(expectedErrorCode, mQueriedSatelliteSupportedResultCode);
+ assertEquals(supported, mQueriedSatelliteSupported);
+ }
+
private void verifySatelliteEnabled(boolean enabled, int expectedErrorCode) {
mIsSatelliteEnabledSemaphore.drainPermits();
mSatelliteControllerUT.requestIsSatelliteEnabled(SUB_ID, mIsSatelliteEnabledReceiver);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
index 589f32b..20b33eb 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSOSMessageRecommenderTest.java
@@ -23,6 +23,8 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -38,8 +40,8 @@
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Looper;
+import android.os.OutcomeReceiver;
import android.os.RemoteException;
-import android.os.ResultReceiver;
import android.telecom.Connection;
import android.telephony.BinderCacheManager;
import android.telephony.ServiceState;
@@ -184,13 +186,22 @@
private void testTimeoutBeforeEmergencyCallEnd(int expectedHandoverType,
String expectedPackageName, String expectedClassName, String expectedAction) {
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
processAllMessages();
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+ processAllMessages();
+ assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
// Wait for the timeout to expires
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(true);
moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
processAllMessages();
if (TextUtils.isEmpty(expectedPackageName) || TextUtils.isEmpty(expectedClassName)) {
@@ -208,13 +219,22 @@
public void testTimeoutBeforeEmergencyCallEnd_EventDisplayEmergencyMessageNotSent() {
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
mTestSatelliteController.setIsSatelliteViaOemProvisioned(false);
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
processAllMessages();
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+ processAllMessages();
+ assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
// Wait for the timeout to expires
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(true);
moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
processAllMessages();
assertFalse(mTestConnection.isEventSent(TelephonyManager.EVENT_DISPLAY_EMERGENCY_MESSAGE));
@@ -224,12 +244,21 @@
@Test
public void testTimeoutBeforeEmergencyCallEnd_T911_FromNotConnectedToConnected() {
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(false);
+ mTestSatelliteController.isOemEnabledSatelliteSupported = false;
mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
processAllMessages();
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+ processAllMessages();
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
mTestSatelliteController.setSatelliteConnectedViaCarrierWithinHysteresisTime(true);
// Wait for the timeout to expires
@@ -241,6 +270,7 @@
DEFAULT_HANDOVER_INTENT_ACTION));
assertUnregisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
assertUnregisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
+ mTestSatelliteController.isOemEnabledSatelliteSupported = true;
}
@Test
@@ -255,13 +285,14 @@
@Test
public void testImsRegistrationStateChangedBeforeTimeout() {
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
processAllMessages();
-
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
when(mPhone.isImsRegistered()).thenReturn(true);
mTestImsManager.sendImsRegistrationStateChangedEvent(0, true);
@@ -285,8 +316,16 @@
mTestImsManager.sendImsRegistrationStateChangedEvent(1, false);
processAllMessages();
assertEquals(2, mTestSOSMessageRecommender.getCountOfTimerStarted());
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+ processAllMessages();
+ assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
// Wait for the timeout to expires
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(true);
moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
processAllMessages();
@@ -324,10 +363,18 @@
assertRegisterForStateChangedEventsTriggered(mPhone, 2, 4, 2);
assertRegisterForStateChangedEventsTriggered(mPhone2, 2, 4, 2);
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+ processAllMessages();
+ assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
mTestSatelliteController.sendProvisionStateChangedEvent(
SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, true);
// Wait for the timeout to expires
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(true);
moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
processAllMessages();
@@ -342,23 +389,31 @@
@Test
public void testEmergencyCallRedialBeforeTimeout() {
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
processAllMessages();
+ assertTrue(mTestSOSMessageRecommender.isTimerStarted());
+ assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
+ assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
+ assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+ mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ processAllMessages();
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
- mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
processAllMessages();
+ assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
- assertTrue(mTestSOSMessageRecommender.isTimerStarted());
- assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
- assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
- assertRegisterForStateChangedEventsTriggered(mPhone2, 1, 2, 1);
-
- // Wait for the timeout to expires
+ // Wait for the timeout to expires and satellite access restriction checking result
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(true);
moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
processAllMessages();
@@ -418,16 +473,23 @@
@Test
public void testSatelliteNotAllowedInCurrentLocation() {
- mTestSatelliteController.setIsSatelliteCommunicationAllowed(false);
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
processAllMessages();
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+ assertTrue(mTestSOSMessageRecommender.isTimerStarted());
+ assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
- /**
- * We should have registered for the state change events and started the timer when
- * receiving the event onEmergencyCallStarted. After getting the callback for the result of
- * the request requestIsSatelliteCommunicationAllowedForCurrentLocation, the resources
- * should be cleaned up.
- */
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+ processAllMessages();
+ assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(false);
+ moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
+ processAllMessages();
+
assertFalse(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(0, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
@@ -475,9 +537,10 @@
private void testCellularServiceStateChangedBeforeTimeout(
@ServiceState.RegState int availableServiceState,
@ServiceState.RegState int unavailableServiceState) {
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback = null;
mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);
processAllMessages();
-
+ assertNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
assertEquals(1, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertRegisterForStateChangedEventsTriggered(mPhone, 1, 2, 1);
@@ -505,7 +568,14 @@
assertEquals(2, mTestSOSMessageRecommender.getCountOfTimerStarted());
assertTrue(mTestSOSMessageRecommender.isTimerStarted());
+ // Move Location service to emergency mode
+ mTestSOSMessageRecommender.onEmergencyCallConnectionStateChanged(
+ mTestConnection.getTelecomCallId(), Connection.STATE_DIALING);
+ processAllMessages();
+ assertNotNull(mTestSOSMessageRecommender.isSatelliteAllowedCallback);
+
// Wait for the timeout to expires
+ mTestSOSMessageRecommender.isSatelliteAllowedCallback.onResult(true);
moveTimeForward(TEST_EMERGENCY_CALL_TO_SOS_MSG_HYSTERESIS_TIMEOUT_MILLIS);
processAllMessages();
@@ -545,8 +615,9 @@
private int mRegisterForSatelliteProvisionStateChangedCalls = 0;
private int mUnregisterForSatelliteProvisionStateChangedCalls = 0;
private boolean mIsSatelliteViaOemProvisioned = true;
- private boolean mIsSatelliteCommunicationAllowed = true;
private boolean mIsSatelliteConnectedViaCarrierWithinHysteresisTime = true;
+ public boolean isOemEnabledSatelliteSupported = true;
+ public boolean isCarrierEnabledSatelliteSupported = true;
/**
* Create a SatelliteController to act as a backend service of
@@ -567,7 +638,12 @@
@Override
public boolean isSatelliteSupportedViaOem() {
- return true;
+ return isOemEnabledSatelliteSupported;
+ }
+
+ @Override
+ public boolean isSatelliteSupportedViaCarrier() {
+ return isCarrierEnabledSatelliteSupported;
}
@Override
@@ -593,15 +669,6 @@
}
@Override
- public void requestIsSatelliteCommunicationAllowedForCurrentLocation(int subId,
- @NonNull ResultReceiver result) {
- Bundle bundle = new Bundle();
- bundle.putBoolean(SatelliteManager.KEY_SATELLITE_COMMUNICATION_ALLOWED,
- mIsSatelliteCommunicationAllowed);
- result.send(SatelliteManager.SATELLITE_RESULT_SUCCESS, bundle);
- }
-
- @Override
public boolean isSatelliteConnectedViaCarrierWithinHysteresisTime() {
return mIsSatelliteConnectedViaCarrierWithinHysteresisTime;
}
@@ -611,10 +678,6 @@
return INVALID_EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE;
}
- public void setIsSatelliteCommunicationAllowed(boolean allowed) {
- mIsSatelliteCommunicationAllowed = allowed;
- }
-
public void setSatelliteConnectedViaCarrierWithinHysteresisTime(
boolean connectedViaCarrier) {
mIsSatelliteConnectedViaCarrierWithinHysteresisTime = connectedViaCarrier;
@@ -717,6 +780,8 @@
}
private static class TestSOSMessageRecommender extends SatelliteSOSMessageRecommender {
+ public OutcomeReceiver<Boolean, SatelliteManager.SatelliteException>
+ isSatelliteAllowedCallback = null;
private ComponentName mSmsAppComponent = new ComponentName(
DEFAULT_SATELLITE_MESSAGING_PACKAGE, DEFAULT_SATELLITE_MESSAGING_CLASS);
@@ -741,6 +806,14 @@
return mSmsAppComponent;
}
+ @Override
+ protected void requestIsSatelliteCommunicationAllowedForCurrentLocation(
+ @NonNull OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> callback) {
+ logd("requestIsSatelliteCommunicationAllowedForCurrentLocation: callback="
+ + callback);
+ isSatelliteAllowedCallback = callback;
+ }
+
public boolean isTimerStarted() {
return hasMessages(EVENT_TIME_OUT);
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSessionControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSessionControllerTest.java
index 50c6c24..6d3bb4e 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSessionControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteSessionControllerTest.java
@@ -38,7 +38,7 @@
import android.content.res.Resources;
import android.os.Looper;
import android.os.Message;
-import android.telephony.satellite.ISatelliteStateCallback;
+import android.telephony.satellite.ISatelliteModemStateCallback;
import android.telephony.satellite.SatelliteManager;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -76,7 +76,7 @@
private TestSatelliteModemInterface mSatelliteModemInterface;
private TestSatelliteSessionController mTestSatelliteSessionController;
- private TestSatelliteStateCallback mTestSatelliteStateCallback;
+ private TestSatelliteModemStateCallback mTestSatelliteModemStateCallback;
@Mock private SatelliteController mMockSatelliteController;
@Mock private DatagramReceiver mMockDatagramReceiver;
@@ -107,11 +107,11 @@
Looper.myLooper(), true, mSatelliteModemInterface);
processAllMessages();
- mTestSatelliteStateCallback = new TestSatelliteStateCallback();
+ mTestSatelliteModemStateCallback = new TestSatelliteModemStateCallback();
mTestSatelliteSessionController.registerForSatelliteModemStateChanged(
- mTestSatelliteStateCallback);
+ mTestSatelliteModemStateCallback);
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
}
@After
@@ -176,7 +176,7 @@
// SatelliteSessionController should move to IDLE state after the modem is powered on.
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -186,7 +186,7 @@
// SatelliteSessionController should move back to POWER_OFF state.
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
assertEquals(STATE_POWER_OFF, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -196,7 +196,7 @@
// SatelliteSessionController should move to IDLE state after radio is turned on.
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -206,7 +206,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -218,7 +218,7 @@
processAllMessages();
// SatelliteSessionController should move to IDLE state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -230,7 +230,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -242,7 +242,7 @@
processAllMessages();
// SatelliteSessionController should move to LISTENING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_LISTENING);
assertEquals(STATE_LISTENING, mTestSatelliteSessionController.getCurrentStateName());
assertEquals(1, mSatelliteModemInterface.getListeningEnabledCount());
@@ -255,7 +255,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertEquals(1, mSatelliteModemInterface.getListeningDisabledCount());
@@ -267,7 +267,7 @@
processAllMessages();
// SatelliteSessionController should move to LISTENING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_LISTENING);
assertEquals(STATE_LISTENING, mTestSatelliteSessionController.getCurrentStateName());
assertEquals(2, mSatelliteModemInterface.getListeningEnabledCount());
@@ -280,7 +280,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertEquals(2, mSatelliteModemInterface.getListeningDisabledCount());
@@ -293,7 +293,7 @@
processAllMessages();
// SatelliteSessionController should move to IDLE state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -305,7 +305,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -316,7 +316,7 @@
processAllMessages();
// SatelliteSessionController should move to LISTENING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_LISTENING);
assertEquals(STATE_LISTENING, mTestSatelliteSessionController.getCurrentStateName());
assertEquals(3, mSatelliteModemInterface.getListeningEnabledCount());
@@ -327,7 +327,7 @@
processAllMessages();
// SatelliteSessionController should move to IDLE state after timeout
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
assertEquals(3, mSatelliteModemInterface.getListeningDisabledCount());
@@ -340,7 +340,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -352,7 +352,7 @@
processAllMessages();
// SatelliteSessionController should stay at TRANSFERRING state.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -364,7 +364,7 @@
// SatelliteSessionController should stay at TRANSFERRING state instead of moving to IDLE
// state.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -375,7 +375,7 @@
processAllMessages();
// SatelliteSessionController should stay at TRANSFERRING state.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -387,7 +387,7 @@
// SatelliteSessionController should stay at TRANSFERRING state instead of moving to IDLE
// state.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
@@ -397,7 +397,7 @@
// SatelliteSessionController should move to POWER_OFF state.
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
assertEquals(STATE_POWER_OFF, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isSendingTriggeredDuringTransferringState());
}
@@ -419,8 +419,8 @@
// SatelliteSessionController should move to NOT_CONNECTED state after the satellite modem
// is powered on.
- assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
+ SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
verify(mMockDatagramController).onSatelliteModemStateChanged(
@@ -430,7 +430,7 @@
moveTimeForward(TEST_SATELLITE_TIMEOUT_MILLIS);
processAllMessages();
// SatelliteSessionController should stay at NOT_CONNECTED state.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
setupDatagramTransferringState(true);
@@ -441,7 +441,7 @@
// SatelliteSessionController should move back to POWER_OFF state.
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
assertEquals(STATE_POWER_OFF, mTestSatelliteSessionController.getCurrentStateName());
verify(mMockDatagramController).onSatelliteModemStateChanged(
SatelliteManager.SATELLITE_MODEM_STATE_OFF);
@@ -452,8 +452,8 @@
processAllMessages();
// SatelliteSessionController should move to NOT_CONNECTED state after radio is turned on.
- assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
+ SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
verify(mMockDatagramController).onSatelliteModemStateChanged(
@@ -466,7 +466,7 @@
processAllMessages();
// The datagram sending event should be ignored.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
// Satellite modem is connected to a satellite network.
@@ -476,7 +476,7 @@
// SatelliteSessionController should move to CONNECTED state
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
assertEquals(STATE_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
verify(mMockDatagramController).onSatelliteModemStateChanged(
@@ -489,7 +489,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
@@ -504,7 +504,7 @@
processAllMessages();
// SatelliteSessionController should move to CONNECTED state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
assertEquals(STATE_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
@@ -519,7 +519,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
@@ -534,7 +534,7 @@
processAllMessages();
// SatelliteSessionController should move to CONNECTED state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
assertEquals(STATE_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
@@ -549,7 +549,7 @@
processAllMessages();
// SatelliteSessionController should move to TRANSFERRING state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING);
assertEquals(STATE_TRANSFERRING, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
@@ -563,7 +563,7 @@
processAllMessages();
// SatelliteSessionController should move to CONNECTED state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
assertEquals(STATE_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
assertTrue(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
@@ -576,7 +576,7 @@
processAllMessages();
// SatelliteSessionController should move to IDLE state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
assertFalse(mTestSatelliteSessionController.isNbIotInactivityTimerStarted());
@@ -591,7 +591,7 @@
processAllMessages();
// SatelliteSessionController should move to NOT_CONNECTED state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
verify(mMockDatagramController).onSatelliteModemStateChanged(
@@ -605,7 +605,7 @@
// SatelliteSessionController should move to CONNECTED state
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
assertEquals(STATE_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
verify(mMockDatagramController).onSatelliteModemStateChanged(
SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
@@ -617,8 +617,8 @@
processAllMessages();
// SatelliteSessionController should move to NOT_CONNECTED state
- assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
+ SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
verify(mMockDatagramController).onSatelliteModemStateChanged(
SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
@@ -631,7 +631,7 @@
// SatelliteSessionController should move to CONNECTED state
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
assertEquals(STATE_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
verify(mMockDatagramController).onSatelliteModemStateChanged(
SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
@@ -643,7 +643,7 @@
// SatelliteSessionController should move to POWER_OFF state.
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
assertEquals(STATE_POWER_OFF, mTestSatelliteSessionController.getCurrentStateName());
verify(mMockDatagramController).onSatelliteModemStateChanged(
SatelliteManager.SATELLITE_MODEM_STATE_OFF);
@@ -655,8 +655,8 @@
// SatelliteSessionController should move to NOT_CONNECTED state after the satellite modem
// is powered on.
- assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
+ SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
verify(mMockDatagramController).onSatelliteModemStateChanged(
SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
@@ -669,7 +669,7 @@
// SatelliteSessionController should move to CONNECTED state
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED);
assertEquals(STATE_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
// Wait for timeout
@@ -677,7 +677,7 @@
processAllMessages();
// SatelliteSessionController should move to IDLE state.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
@@ -692,7 +692,7 @@
// SatelliteSessionController should stay at IDLE state because it failed to disable
// cellular scanning.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
mSatelliteModemInterface.setErrorCode(SatelliteManager.SATELLITE_RESULT_SUCCESS);
@@ -703,7 +703,7 @@
// SatelliteSessionController should move to POWER_OFF
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
assertEquals(STATE_POWER_OFF, mTestSatelliteSessionController.getCurrentStateName());
// Power on the modem.
@@ -712,8 +712,8 @@
// SatelliteSessionController should move to NOT_CONNECTED state after the satellite modem
// is powered on.
- assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
+ SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
moveTimeForward(TEST_SATELLITE_TIMEOUT_MILLIS);
@@ -721,7 +721,7 @@
// SatelliteSessionController should move to IDLE state because NB-IOT inactivity timer has
// timed out.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
@@ -731,7 +731,7 @@
// SatelliteSessionController should move to POWER_OFF
assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
+ mTestSatelliteModemStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_OFF);
assertEquals(STATE_POWER_OFF, mTestSatelliteSessionController.getCurrentStateName());
// Power on the modem.
@@ -740,8 +740,8 @@
// SatelliteSessionController should move to NOT_CONNECTED state after the satellite modem
// is powered on.
- assertSuccessfulModemStateChangedCallback(
- mTestSatelliteStateCallback, SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
+ SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
// Start sending datagrams and the NB-IOT inactivity timer should be stopped.
@@ -752,7 +752,7 @@
processAllMessages();
// SatelliteSessionController should stay at NOT_CONNECTED state because.
- assertModemStateChangedCallbackNotCalled(mTestSatelliteStateCallback);
+ assertModemStateChangedCallbackNotCalled(mTestSatelliteModemStateCallback);
assertEquals(STATE_NOT_CONNECTED, mTestSatelliteSessionController.getCurrentStateName());
// Transferring datagram failed because satellite failed to connect to a satellite network.
@@ -771,7 +771,7 @@
// SatelliteSessionController should move to IDLE state because NB-IOT inactivity timer has
// timed out.
- assertSuccessfulModemStateChangedCallback(mTestSatelliteStateCallback,
+ assertSuccessfulModemStateChangedCallback(mTestSatelliteModemStateCallback,
SatelliteManager.SATELLITE_MODEM_STATE_IDLE);
assertEquals(STATE_IDLE, mTestSatelliteSessionController.getCurrentStateName());
}
@@ -850,7 +850,7 @@
}
}
- private static class TestSatelliteStateCallback extends ISatelliteStateCallback.Stub {
+ private static class TestSatelliteModemStateCallback extends ISatelliteModemStateCallback.Stub {
private final AtomicInteger mModemState = new AtomicInteger(
SatelliteManager.SATELLITE_MODEM_STATE_OFF);
private final Semaphore mSemaphore = new Semaphore(0);
@@ -885,7 +885,7 @@
}
private static void assertSuccessfulModemStateChangedCallback(
- TestSatelliteStateCallback callback,
+ TestSatelliteModemStateCallback callback,
@SatelliteManager.SatelliteModemState int expectedModemState) {
boolean successful = callback.waitUntilResult();
assertTrue(successful);
@@ -893,7 +893,7 @@
}
private static void assertModemStateChangedCallbackNotCalled(
- TestSatelliteStateCallback callback) {
+ TestSatelliteModemStateCallback callback) {
boolean successful = callback.waitUntilResult();
assertFalse(successful);
}