Merge "add overlay configs for last sos message connect and response timeout." into 24D1-dev
diff --git a/proto/src/persist_atoms.proto b/proto/src/persist_atoms.proto
index 46a2400..3847fcd 100644
--- a/proto/src/persist_atoms.proto
+++ b/proto/src/persist_atoms.proto
@@ -682,6 +682,7 @@
optional int32 count_of_incoming_datagram_success = 10;
optional int32 count_of_incoming_datagram_failed = 11;
optional bool is_demo_mode = 12;
+ optional int32 max_ntn_signal_strength_level = 13;
}
message SatelliteIncomingDatagram {
diff --git a/src/java/com/android/internal/telephony/data/DataNetworkController.java b/src/java/com/android/internal/telephony/data/DataNetworkController.java
index 2725295..12c94df 100644
--- a/src/java/com/android/internal/telephony/data/DataNetworkController.java
+++ b/src/java/com/android/internal/telephony/data/DataNetworkController.java
@@ -559,6 +559,16 @@
}
/**
+ * Print "capabilities - connectivity transport". e.g. INTERNET|NOT_RESTRICTED-SATELLITE
+ */
+ @NonNull
+ public String toStringSimplified() {
+ return size() > 0 ? DataUtils.networkCapabilitiesToString(get(0).getCapabilities())
+ + "-" + DataUtils.connectivityTransportsToString(get(0).getTransportTypes())
+ : "";
+ }
+
+ /**
* Dump the network request list.
*
* @param pw print writer.
@@ -1838,8 +1848,7 @@
log("Re-evaluating " + networkRequestLists.stream().mapToInt(List::size).sum()
+ " unsatisfied network requests in " + networkRequestLists.size()
+ " groups, " + networkRequestLists.stream().map(
- requestList -> DataUtils.networkCapabilitiesToString(
- requestList.get(0).getCapabilities()))
+ NetworkRequestList::toStringSimplified)
.collect(Collectors.joining(", ")) + " due to " + reason);
// Second, see if any existing network can satisfy those network requests.
@@ -2115,23 +2124,20 @@
@NonNull TelephonyNetworkRequest networkRequest, @TransportType int transport) {
// When the device is on satellite, only restricted network request can request network.
if (mServiceState.isUsingNonTerrestrialNetwork()
- && networkRequest.getNativeNetworkRequest().hasCapability(
+ && networkRequest.hasCapability(
NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)) {
return false;
}
// If the network request does not specify cellular or satellite, then it can be
// satisfied when the device is either on cellular ot satellite.
- if (!networkRequest.getNativeNetworkRequest().hasTransport(
- NetworkCapabilities.TRANSPORT_CELLULAR)
- && !networkRequest.getNativeNetworkRequest().hasTransport(
- NetworkCapabilities.TRANSPORT_SATELLITE)) {
+ if (!networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
+ && !networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE)) {
return true;
}
// Check if this is a IWLAN network request.
- if (networkRequest.getNativeNetworkRequest().hasTransport(
- NetworkCapabilities.TRANSPORT_CELLULAR)
+ if (networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
&& transport == AccessNetworkConstants.TRANSPORT_TYPE_WLAN) {
// If the cellular request would result in bringing up network on IWLAN, then no
// need to check if the device is using satellite network.
@@ -2140,8 +2146,7 @@
// As a short term solution, allowing some networks to be always marked as cellular
// transport if certain capabilities are in the network request.
- if (networkRequest.getNativeNetworkRequest().hasTransport(
- NetworkCapabilities.TRANSPORT_CELLULAR) && Arrays.stream(
+ if (networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) && Arrays.stream(
networkRequest.getCapabilities())
.anyMatch(mDataConfigManager.getForcedCellularTransportCapabilities()::contains)) {
return true;
@@ -2151,11 +2156,9 @@
// the network is satellite, then the request must specify satellite transport and
// restricted.
return (mServiceState.isUsingNonTerrestrialNetwork()
- && networkRequest.getNativeNetworkRequest().hasTransport(
- NetworkCapabilities.TRANSPORT_SATELLITE))
+ && networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_SATELLITE))
|| (!mServiceState.isUsingNonTerrestrialNetwork()
- && networkRequest.getNativeNetworkRequest().hasTransport(
- NetworkCapabilities.TRANSPORT_CELLULAR));
+ && networkRequest.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
}
/**
diff --git a/src/java/com/android/internal/telephony/data/DataUtils.java b/src/java/com/android/internal/telephony/data/DataUtils.java
index cca6deb..6814516 100644
--- a/src/java/com/android/internal/telephony/data/DataUtils.java
+++ b/src/java/com/android/internal/telephony/data/DataUtils.java
@@ -27,6 +27,7 @@
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.AccessNetworkConstants.RadioAccessNetworkType;
import android.telephony.AccessNetworkConstants.TransportType;
+import android.telephony.Annotation.ConnectivityTransport;
import android.telephony.Annotation.DataActivityType;
import android.telephony.Annotation.NetCapability;
import android.telephony.Annotation.NetworkType;
@@ -176,6 +177,44 @@
}
/**
+ * Concat an array of {@link NetworkCapabilities.Transport} in string format.
+ *
+ * @param transports an array of connectivity transports
+ * @return a string of the array of transports.
+ */
+ @NonNull
+ public static String connectivityTransportsToString(
+ @NonNull @ConnectivityTransport int[] transports) {
+ return Arrays.stream(transports).mapToObj(DataUtils::connectivityTransportToString)
+ .collect(Collectors.joining("|"));
+ }
+
+ /**
+ * Convert a {@link NetworkCapabilities.Transport} to a string.
+ *
+ * @param transport the connectivity transport
+ * @return the transport in string
+ */
+ @NonNull
+ public static String connectivityTransportToString(
+ @ConnectivityTransport int transport) {
+ return switch (transport) {
+ case NetworkCapabilities.TRANSPORT_CELLULAR -> "CELLULAR";
+ case NetworkCapabilities.TRANSPORT_WIFI -> "WIFI";
+ case NetworkCapabilities.TRANSPORT_BLUETOOTH -> "BLUETOOTH";
+ case NetworkCapabilities.TRANSPORT_ETHERNET -> "ETHERNET";
+ case NetworkCapabilities.TRANSPORT_VPN -> "VPN";
+ case NetworkCapabilities.TRANSPORT_WIFI_AWARE -> "WIFI_AWARE";
+ case NetworkCapabilities.TRANSPORT_LOWPAN -> "LOWPAN";
+ case NetworkCapabilities.TRANSPORT_TEST -> "TEST";
+ case NetworkCapabilities.TRANSPORT_USB -> "USB";
+ case NetworkCapabilities.TRANSPORT_THREAD -> "THREAD";
+ case NetworkCapabilities.TRANSPORT_SATELLITE -> "SATELLITE";
+ default -> "Unknown(" + transport + ")";
+ };
+ }
+
+ /**
* Convert network capabilities to string.
*
* This is for debugging and logging purposes only.
@@ -427,8 +466,7 @@
Arrays.stream(networkRequest.getNativeNetworkRequest()
.getEnterpriseIds())
.boxed().collect(Collectors.toSet()),
- Arrays.stream(networkRequest.getNativeNetworkRequest()
- .getTransportTypes())
+ Arrays.stream(networkRequest.getTransportTypes())
.boxed().collect(Collectors.toSet())
),
v -> new NetworkRequestList()).add(networkRequest);
diff --git a/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java b/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java
index b059100..2be3556 100644
--- a/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java
+++ b/src/java/com/android/internal/telephony/data/TelephonyNetworkRequest.java
@@ -24,6 +24,7 @@
import android.net.NetworkRequest;
import android.net.NetworkSpecifier;
import android.os.SystemClock;
+import android.telephony.Annotation.ConnectivityTransport;
import android.telephony.Annotation.NetCapability;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataProfile;
@@ -238,6 +239,23 @@
}
/**
+ * @see NetworkRequest#getTransportTypes()
+ */
+ @NonNull
+ @ConnectivityTransport
+ public int[] getTransportTypes() {
+ return mNativeNetworkRequest.getTransportTypes();
+ }
+
+ /**
+ * @return {@code true} if the request can be served on the specified transport.
+ * @see NetworkRequest#hasTransport
+ */
+ public boolean hasTransport(@ConnectivityTransport int transport) {
+ return mNativeNetworkRequest.hasTransport(transport);
+ }
+
+ /**
* @see NetworkRequest#canBeSatisfiedBy(NetworkCapabilities)
*/
public boolean canBeSatisfiedBy(@Nullable NetworkCapabilities nc) {
diff --git a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
index 61325316..0031c7e 100644
--- a/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
+++ b/src/java/com/android/internal/telephony/metrics/MetricsCollector.java
@@ -1370,7 +1370,8 @@
satelliteSession.countOfOutgoingDatagramFailed,
satelliteSession.countOfIncomingDatagramSuccess,
satelliteSession.countOfIncomingDatagramFailed,
- satelliteSession.isDemoMode);
+ satelliteSession.isDemoMode,
+ satelliteSession.maxNtnSignalStrengthLevel);
}
private static StatsEvent buildStatsEvent(SatelliteIncomingDatagram stats) {
diff --git a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
index 979777b..8afdc36 100644
--- a/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
+++ b/src/java/com/android/internal/telephony/metrics/PersistAtomsStorage.java
@@ -2066,7 +2066,7 @@
}
/**
- * Returns SatelliteOutgoingDatagram atom that has same values or {@code null}
+ * Returns SatelliteSession atom that has same values or {@code null}
* if it does not exist.
*/
private @Nullable SatelliteSession find(
@@ -2085,7 +2085,8 @@
&& stats.countOfOutgoingDatagramFailed == key.countOfOutgoingDatagramFailed
&& stats.countOfIncomingDatagramSuccess == key.countOfIncomingDatagramSuccess
&& stats.countOfIncomingDatagramFailed == key.countOfIncomingDatagramFailed
- && stats.isDemoMode == key.isDemoMode) {
+ && stats.isDemoMode == key.isDemoMode
+ && stats.maxNtnSignalStrengthLevel == key.maxNtnSignalStrengthLevel) {
return stats;
}
}
@@ -2093,7 +2094,7 @@
}
/**
- * Returns SatelliteOutgoingDatagram atom that has same values or {@code null}
+ * Returns SatelliteSosMessageRecommender atom that has same values or {@code null}
* if it does not exist.
*/
private @Nullable SatelliteSosMessageRecommender find(
diff --git a/src/java/com/android/internal/telephony/metrics/SatelliteStats.java b/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
index a9aab58..e097c62 100644
--- a/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
+++ b/src/java/com/android/internal/telephony/metrics/SatelliteStats.java
@@ -16,6 +16,9 @@
package com.android.internal.telephony.metrics;
+import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_NONE;
+
+import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import com.android.internal.telephony.PhoneFactory;
@@ -560,6 +563,7 @@
private final int mCountOfIncomingDatagramSuccess;
private final int mCountOfIncomingDatagramFailed;
private final boolean mIsDemoMode;
+ private final @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel;
private SatelliteSessionParams(Builder builder) {
this.mSatelliteServiceInitializationResult =
@@ -575,6 +579,7 @@
this.mCountOfIncomingDatagramSuccess = builder.mCountOfIncomingDatagramSuccess;
this.mCountOfIncomingDatagramFailed = builder.mCountOfIncomingDatagramFailed;
this.mIsDemoMode = builder.mIsDemoMode;
+ this.mMaxNtnSignalStrengthLevel = builder.mMaxNtnSignalStrengthLevel;
}
public int getSatelliteServiceInitializationResult() {
@@ -621,6 +626,10 @@
return mIsDemoMode;
}
+ public @NtnSignalStrength.NtnSignalStrengthLevel int getMaxNtnSignalStrengthLevel() {
+ return mMaxNtnSignalStrengthLevel;
+ }
+
/**
* A builder class to create {@link SatelliteSessionParams} data structure class
*/
@@ -636,6 +645,8 @@
private int mCountOfIncomingDatagramSuccess = -1;
private int mCountOfIncomingDatagramFailed = -1;
private boolean mIsDemoMode = false;
+ private @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel =
+ NTN_SIGNAL_STRENGTH_NONE;
/**
* Sets satelliteServiceInitializationResult value of {@link SatelliteSession}
@@ -711,6 +722,13 @@
return this;
}
+ /** Sets the max ntn signal strength for the satellite session */
+ public Builder setMaxNtnSignalStrengthLevel(
+ @NtnSignalStrength.NtnSignalStrengthLevel int maxNtnSignalStrengthLevel) {
+ this.mMaxNtnSignalStrengthLevel = maxNtnSignalStrengthLevel;
+ return this;
+ }
+
/**
* Returns SessionParams, which contains whole component of
* {@link SatelliteSession} atom
@@ -735,6 +753,7 @@
+ ", CountOfIncomingDatagramSuccess=" + mCountOfIncomingDatagramSuccess
+ ", CountOfIncomingDatagramFailed=" + mCountOfIncomingDatagramFailed
+ ", IsDemoMode=" + mIsDemoMode
+ + ", MaxNtnSignalStrengthLevel=" + mMaxNtnSignalStrengthLevel
+ ")";
}
}
@@ -1261,6 +1280,7 @@
proto.countOfIncomingDatagramSuccess = param.getCountOfIncomingDatagramSuccess();
proto.countOfIncomingDatagramFailed = param.getCountOfOutgoingDatagramFailed();
proto.isDemoMode = param.getIsDemoMode();
+ proto.maxNtnSignalStrengthLevel = param.getMaxNtnSignalStrengthLevel();
mAtomsStorage.addSatelliteSessionStats(proto);
}
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteController.java b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
index c0917fe..35603ab 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteController.java
@@ -218,7 +218,8 @@
@NonNull private static SatelliteController sInstance;
@NonNull private final Context mContext;
@NonNull private final SatelliteModemInterface mSatelliteModemInterface;
- @NonNull private SatelliteSessionController mSatelliteSessionController;
+ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+ @NonNull protected SatelliteSessionController mSatelliteSessionController;
@NonNull private final PointingAppController mPointingAppController;
@NonNull private final DatagramController mDatagramController;
@NonNull private final ControllerMetricsStats mControllerMetricsStats;
@@ -3242,6 +3243,9 @@
}
mSatelliteSessionController = SatelliteSessionController.make(
mContext, getLooper(), supported);
+ logd("create a new SatelliteSessionController due to isSatelliteSupported state has "
+ + "changed to " + supported);
+
if (supported) {
registerForSatelliteProvisionStateChanged();
registerForPendingDatagramCount();
@@ -3430,6 +3434,7 @@
synchronized (mNtnSignalsStrengthLock) {
mNtnSignalStrength = ntnSignalStrength;
}
+ mSessionMetricsStats.updateMaxNtnSignalStrengthLevel(ntnSignalStrength.getLevel());
List<INtnSignalStrengthCallback> deadCallersList = new ArrayList<>();
mNtnSignalStrengthChangedListeners.values().forEach(listener -> {
@@ -3502,6 +3507,10 @@
}
}
mIsSatelliteSupported = supported;
+ mSatelliteSessionController = SatelliteSessionController.make(
+ mContext, getLooper(), supported);
+ logd("create a new SatelliteSessionController due to isSatelliteSupported state has "
+ + "changed to " + supported);
}
List<ISatelliteSupportedStateCallback> deadCallersList = new ArrayList<>();
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java b/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java
index 58260d1..8a26fd2 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteModemInterface.java
@@ -66,6 +66,8 @@
@NonNull private static SatelliteModemInterface sInstance;
@NonNull private final Context mContext;
@NonNull private final DemoSimulator mDemoSimulator;
+ @NonNull private final SatelliteListener mVendorListener;
+ @NonNull private final SatelliteListener mDemoListener;
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
@NonNull protected final ExponentialBackoff mExponentialBackoff;
@NonNull private final Object mLock = new Object();
@@ -237,6 +239,8 @@
SatelliteController satelliteController, @NonNull Looper looper) {
mContext = context;
mDemoSimulator = DemoSimulator.make(context, satelliteController);
+ mVendorListener = new SatelliteListener(false);
+ mDemoListener = new SatelliteListener(true);
mIsSatelliteServiceSupported = getSatelliteServiceSupport();
mSatelliteController = satelliteController;
mExponentialBackoff = new ExponentialBackoff(REBIND_INITIAL_DELAY, REBIND_MAXIMUM_DELAY,
@@ -349,11 +353,8 @@
mSatelliteService = ISatellite.Stub.asInterface(service);
mExponentialBackoff.stop();
try {
- SatelliteListener vendorListener = new SatelliteListener(false);
- mSatelliteService.setSatelliteListener(vendorListener);
-
- SatelliteListener demoListener = new SatelliteListener(true);
- mDemoSimulator.setSatelliteListener(demoListener);
+ mSatelliteService.setSatelliteListener(mVendorListener);
+ mDemoSimulator.setSatelliteListener(mDemoListener);
} catch (RemoteException e) {
// TODO: Retry setSatelliteListener
logd("setSatelliteListener: RemoteException " + e);
diff --git a/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java b/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
index dc0cf47..dcf9bb0 100644
--- a/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
+++ b/src/java/com/android/internal/telephony/satellite/SatelliteSessionController.java
@@ -39,7 +39,6 @@
import android.os.Message;
import android.os.RemoteException;
import android.os.SystemProperties;
-import android.telephony.Rlog;
import android.telephony.satellite.ISatelliteModemStateCallback;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.stub.ISatelliteGateway;
@@ -163,15 +162,9 @@
*/
public static SatelliteSessionController make(
@NonNull Context context, @NonNull Looper looper, boolean isSatelliteSupported) {
- if (sInstance == null) {
+ if (sInstance == null || isSatelliteSupported != sInstance.mIsSatelliteSupported) {
sInstance = new SatelliteSessionController(context, looper, isSatelliteSupported,
SatelliteModemInterface.getInstance());
- } else {
- if (isSatelliteSupported != sInstance.mIsSatelliteSupported) {
- Rlog.e(TAG, "New satellite support state " + isSatelliteSupported
- + " is different from existing state " + sInstance.mIsSatelliteSupported
- + ". Ignore the new state.");
- }
}
return sInstance;
}
diff --git a/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java b/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java
index c50db07..73ede60 100644
--- a/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java
+++ b/src/java/com/android/internal/telephony/satellite/metrics/SessionMetricsStats.java
@@ -16,7 +16,10 @@
package com.android.internal.telephony.satellite.metrics;
+import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_NONE;
+
import android.annotation.NonNull;
+import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import android.util.Log;
@@ -41,7 +44,7 @@
private int mCountOfSuccessfulIncomingDatagram;
private int mCountOfIncomingDatagramFailed;
private boolean mIsDemoMode;
-
+ private @NtnSignalStrength.NtnSignalStrengthLevel int mMaxNtnSignalStrengthLevel;
private SessionMetricsStats() {
initializeSessionMetricsParam();
@@ -144,6 +147,17 @@
return this;
}
+ /** Updates the max Ntn signal strength level for the session. */
+ public SessionMetricsStats updateMaxNtnSignalStrengthLevel(
+ @NtnSignalStrength.NtnSignalStrengthLevel int latestNtnSignalStrengthLevel) {
+ if (latestNtnSignalStrengthLevel > mMaxNtnSignalStrengthLevel) {
+ mMaxNtnSignalStrengthLevel = latestNtnSignalStrengthLevel;
+ }
+ logd("updateMaxNtnSignalsStrength: latest signal strength=" + latestNtnSignalStrengthLevel
+ + ", max signal strength=" + mMaxNtnSignalStrengthLevel);
+ return this;
+ }
+
/** Report the session metrics atoms to PersistAtomsStorage in telephony. */
public void reportSessionMetrics() {
SatelliteStats.SatelliteSessionParams sessionParams =
@@ -159,6 +173,7 @@
.setCountOfIncomingDatagramSuccess(mCountOfSuccessfulIncomingDatagram)
.setCountOfIncomingDatagramFailed(mCountOfIncomingDatagramFailed)
.setIsDemoMode(mIsDemoMode)
+ .setMaxNtnSignalStrengthLevel(mMaxNtnSignalStrengthLevel)
.build();
logd("reportSessionMetrics: " + sessionParams.toString());
SatelliteStats.getInstance().onSatelliteSessionMetrics(sessionParams);
@@ -187,6 +202,7 @@
mCountOfSuccessfulIncomingDatagram = 0;
mCountOfIncomingDatagramFailed = 0;
mIsDemoMode = false;
+ mMaxNtnSignalStrengthLevel = NTN_SIGNAL_STRENGTH_NONE;
}
private static void logd(@NonNull String log) {
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionDatabaseManager.java b/src/java/com/android/internal/telephony/subscription/SubscriptionDatabaseManager.java
index 3d07d47..7596754 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionDatabaseManager.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionDatabaseManager.java
@@ -1044,7 +1044,7 @@
throw new IllegalArgumentException("updateSubscription: subscription does not "
+ "exist. subId=" + subId);
}
- if (oldSubInfo.equals(newSubInfo)) return;
+ if (oldSubInfo.equalsDbItemsOnly(newSubInfo)) return;
if (updateDatabase(subId, createDeltaContentValues(oldSubInfo, newSubInfo)) > 0) {
mAllSubscriptionInfoInternalCache.put(subId, newSubInfo);
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionInfoInternal.java b/src/java/com/android/internal/telephony/subscription/SubscriptionInfoInternal.java
index bb77d5c..c6dee7c 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionInfoInternal.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionInfoInternal.java
@@ -454,12 +454,13 @@
*/
private final int mIsOnlyNonTerrestrialNetwork;
- // Below are the fields that do not exist in the SimInfo table.
+ // This field does not exist in the SimInfo table.
/**
* The card ID of the SIM card. This maps uniquely to {@link #mCardString}.
*/
private final int mCardId;
+ // This field does not exist in the SimInfo table.
/**
* Whether group of the subscription is disabled. This is only useful if it's a grouped
* opportunistic subscription. In this case, if all primary (non-opportunistic) subscriptions
@@ -1370,11 +1371,14 @@
+ "]";
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- SubscriptionInfoInternal that = (SubscriptionInfoInternal) o;
+ /**
+ * Campare only the columns existing in the SimInfo table and the mapped variables to see if
+ * they are equal.
+ *
+ * @param that SubscriptionInfoInternal to be compared
+ * @return {@code true} if equals.
+ */
+ public boolean equalsDbItemsOnly(@NonNull SubscriptionInfoInternal that) {
return mId == that.mId && mSimSlotIndex == that.mSimSlotIndex
&& mDisplayNameSource == that.mDisplayNameSource && mIconTint == that.mIconTint
&& mDataRoaming == that.mDataRoaming && mIsEmbedded == that.mIsEmbedded
@@ -1407,7 +1411,6 @@
&& mPortIndex == that.mPortIndex && mUsageSetting == that.mUsageSetting
&& mLastUsedTPMessageReference == that.mLastUsedTPMessageReference
&& mUserId == that.mUserId && mIsSatelliteEnabled == that.mIsSatelliteEnabled
- && mCardId == that.mCardId && mIsGroupDisabled == that.mIsGroupDisabled
&& mIccId.equals(that.mIccId) && mDisplayName.equals(that.mDisplayName)
&& mCarrierName.equals(that.mCarrierName) && mNumber.equals(that.mNumber)
&& mMcc.equals(that.mMcc) && mMnc.equals(that.mMnc) && mEhplmns.equals(
@@ -1431,6 +1434,15 @@
}
@Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ SubscriptionInfoInternal that = (SubscriptionInfoInternal) o;
+ return equalsDbItemsOnly(that)
+ && mCardId == that.mCardId && mIsGroupDisabled == that.mIsGroupDisabled;
+ }
+
+ @Override
public int hashCode() {
int result = Objects.hash(mId, mIccId, mSimSlotIndex, mDisplayName, mCarrierName,
mDisplayNameSource, mIconTint, mNumber, mDataRoaming, mMcc, mMnc, mEhplmns, mHplmns,
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
index 3aad333..5e5cb9a 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/PersistAtomsStorageTest.java
@@ -1149,6 +1149,7 @@
mSatelliteSession1.countOfIncomingDatagramSuccess = 1;
mSatelliteSession1.countOfIncomingDatagramFailed = 0;
mSatelliteSession1.isDemoMode = false;
+ mSatelliteSession1.maxNtnSignalStrengthLevel = 2;
mSatelliteSession2 = new SatelliteSession();
mSatelliteSession2.satelliteServiceInitializationResult =
@@ -1156,16 +1157,17 @@
mSatelliteSession2.satelliteTechnology =
SatelliteProtoEnums.NT_RADIO_TECHNOLOGY_NB_IOT_NTN;
mSatelliteSession2.count = 1;
- mSatelliteSession1.satelliteServiceTerminationResult =
+ mSatelliteSession2.satelliteServiceTerminationResult =
SatelliteProtoEnums.SATELLITE_ERROR_NONE;
- mSatelliteSession1.initializationProcessingTimeMillis = 300;
- mSatelliteSession1.terminationProcessingTimeMillis = 100;
- mSatelliteSession1.sessionDurationSeconds = 10;
- mSatelliteSession1.countOfOutgoingDatagramSuccess = 0;
- mSatelliteSession1.countOfOutgoingDatagramFailed = 2;
- mSatelliteSession1.countOfIncomingDatagramSuccess = 0;
- mSatelliteSession1.countOfIncomingDatagramFailed = 1;
+ mSatelliteSession2.initializationProcessingTimeMillis = 300;
+ mSatelliteSession2.terminationProcessingTimeMillis = 100;
+ mSatelliteSession2.sessionDurationSeconds = 10;
+ mSatelliteSession2.countOfOutgoingDatagramSuccess = 0;
+ mSatelliteSession2.countOfOutgoingDatagramFailed = 2;
+ mSatelliteSession2.countOfIncomingDatagramSuccess = 0;
+ mSatelliteSession2.countOfIncomingDatagramFailed = 1;
mSatelliteSession2.isDemoMode = true;
+ mSatelliteSession2.maxNtnSignalStrengthLevel = 4;
mSatelliteSessions =
new SatelliteSession[] {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java b/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
index 9a84224..bc665f8 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/metrics/SatelliteStatsTest.java
@@ -16,6 +16,8 @@
package com.android.internal.telephony.metrics;
+import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_GOOD;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -167,6 +169,7 @@
.setCountOfIncomingDatagramSuccess(1)
.setCountOfIncomingDatagramFailed(0)
.setIsDemoMode(false)
+ .setMaxNtnSignalStrengthLevel(NTN_SIGNAL_STRENGTH_GOOD)
.build();
mSatelliteStats.onSatelliteSessionMetrics(param);
@@ -189,6 +192,7 @@
stats.countOfIncomingDatagramSuccess);
assertEquals(param.getCountOfIncomingDatagramFailed(), stats.countOfIncomingDatagramFailed);
assertEquals(param.getIsDemoMode(), stats.isDemoMode);
+ assertEquals(param.getMaxNtnSignalStrengthLevel(), stats.maxNtnSignalStrengthLevel);
verifyNoMoreInteractions(mPersistAtomsStorage);
}
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 1484b47..f8656bf 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteControllerTest.java
@@ -202,6 +202,7 @@
@Mock private TelephonyConfigUpdateInstallReceiver mMockTelephonyConfigUpdateInstallReceiver;
@Mock private SatelliteConfigParser mMockConfigParser;
@Mock private SatelliteConfig mMockConfig;
+ @Mock private DemoSimulator mMockDemoSimulator;
private Semaphore mIIntegerConsumerSemaphore = new Semaphore(0);
private IIntegerConsumer mIIntegerConsumer = new IIntegerConsumer.Stub() {
@@ -475,6 +476,7 @@
replaceInstance(PhoneFactory.class, "sPhones", null, new Phone[]{mPhone, mPhone2});
replaceInstance(TelephonyConfigUpdateInstallReceiver.class, "sReceiverAdaptorInstance",
null, mMockTelephonyConfigUpdateInstallReceiver);
+ replaceInstance(DemoSimulator.class, "sInstance", null, mMockDemoSimulator);
mServiceState2 = Mockito.mock(ServiceState.class);
when(mPhone.getServiceState()).thenReturn(mServiceState);
@@ -785,6 +787,7 @@
setUpResponseForRequestSatelliteEnabled(true, false, false, SATELLITE_RESULT_SUCCESS);
mSatelliteControllerUT.requestSatelliteEnabled(SUB_ID, true, false, false,
mIIntegerConsumer);
+ mSatelliteControllerUT.setSatelliteSessionController(mMockSatelliteSessionController);
processAllMessages();
assertTrue(waitForIIntegerConsumerResult(1));
assertEquals(SATELLITE_RESULT_SUCCESS, (long) mIIntegerConsumerResults.get(0));
@@ -1304,6 +1307,7 @@
.registerForSatelliteModemStateChanged(callback);
resetSatelliteControllerUTToSupportedAndProvisionedState();
+ mSatelliteControllerUT.setSatelliteSessionController(mMockSatelliteSessionController);
errorCode = mSatelliteControllerUT.registerForSatelliteModemStateChanged(
SUB_ID, callback);
@@ -1324,7 +1328,7 @@
.unregisterForSatelliteModemStateChanged(callback);
resetSatelliteControllerUTToSupportedAndProvisionedState();
-
+ mSatelliteControllerUT.setSatelliteSessionController(mMockSatelliteSessionController);
mSatelliteControllerUT.unregisterForModemStateChanged(SUB_ID, callback);
verify(mMockSatelliteSessionController).unregisterForSatelliteModemStateChanged(callback);
}
@@ -2250,6 +2254,7 @@
SATELLITE_MODEM_STATE_CONNECTED);
resetSatelliteControllerUTToSupportedAndProvisionedState();
+ mSatelliteControllerUT.setSatelliteSessionController(mMockSatelliteSessionController);
clearInvocations(mMockSatelliteSessionController);
clearInvocations(mMockDatagramController);
sendSatelliteModemStateChangedEvent(SATELLITE_MODEM_STATE_UNAVAILABLE, null);
@@ -4502,5 +4507,9 @@
protected long getElapsedRealtime() {
return elapsedRealtime;
}
+
+ void setSatelliteSessionController(SatelliteSessionController satelliteSessionController) {
+ mSatelliteSessionController = satelliteSessionController;
+ }
}
}