diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java index b0552b4a18a307c76b9b34f51dd6f617f0145f39..182d2fcbec67eaf563cf287db85b83b74207485b 100644 --- a/telephony/java/android/telephony/NetworkRegistrationInfo.java +++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java @@ -257,6 +257,9 @@ public final class NetworkRegistrationInfo implements Parcelable { // Updated based on the accessNetworkTechnology private boolean mIsUsingCarrierAggregation; + // Set to {@code true} when network is a non-terrestrial network. + private boolean mIsNonTerrestrialNetwork; + /** * @param domain Network domain. Must be a {@link Domain}. For transport type * {@link AccessNetworkConstants#TRANSPORT_TYPE_WLAN}, this must set to {@link #DOMAIN_PS}. @@ -280,6 +283,7 @@ public final class NetworkRegistrationInfo implements Parcelable { * @param rplmn the registered plmn or the last plmn for attempted registration if reg failed. * @param voiceSpecificInfo Voice specific registration information. * @param dataSpecificInfo Data specific registration information. + * @param isNonTerrestrialNetwork {@code true} if network is a non-terrestrial network. */ private NetworkRegistrationInfo(@Domain int domain, @TransportType int transportType, @RegistrationState int registrationState, @@ -287,7 +291,8 @@ public final class NetworkRegistrationInfo implements Parcelable { boolean emergencyOnly, @Nullable @ServiceType List availableServices, @Nullable CellIdentity cellIdentity, @Nullable String rplmn, @Nullable VoiceSpecificRegistrationInfo voiceSpecificInfo, - @Nullable DataSpecificRegistrationInfo dataSpecificInfo) { + @Nullable DataSpecificRegistrationInfo dataSpecificInfo, + boolean isNonTerrestrialNetwork) { mDomain = domain; mTransportType = transportType; mRegistrationState = registrationState; @@ -304,6 +309,7 @@ public final class NetworkRegistrationInfo implements Parcelable { mRplmn = rplmn; mVoiceSpecificInfo = voiceSpecificInfo; mDataSpecificInfo = dataSpecificInfo; + mIsNonTerrestrialNetwork = isNonTerrestrialNetwork; updateNrState(); } @@ -322,7 +328,7 @@ public final class NetworkRegistrationInfo implements Parcelable { this(domain, transportType, registrationState, accessNetworkTechnology, rejectCause, emergencyOnly, availableServices, cellIdentity, rplmn, new VoiceSpecificRegistrationInfo(cssSupported, roamingIndicator, - systemIsInPrl, defaultRoamingIndicator), null); + systemIsInPrl, defaultRoamingIndicator), null, false); } /** @@ -344,7 +350,7 @@ public final class NetworkRegistrationInfo implements Parcelable { .setNrAvailable(isNrAvailable) .setEnDcAvailable(isEndcAvailable) .setVopsSupportInfo(vopsSupportInfo) - .build()); + .build(), false); } private NetworkRegistrationInfo(Parcel source) { @@ -366,6 +372,7 @@ public final class NetworkRegistrationInfo implements Parcelable { mNrState = source.readInt(); mRplmn = source.readString(); mIsUsingCarrierAggregation = source.readBoolean(); + mIsNonTerrestrialNetwork = source.readBoolean(); } /** @@ -382,6 +389,7 @@ public final class NetworkRegistrationInfo implements Parcelable { mRoamingType = nri.mRoamingType; mAccessNetworkTechnology = nri.mAccessNetworkTechnology; mIsUsingCarrierAggregation = nri.mIsUsingCarrierAggregation; + mIsNonTerrestrialNetwork = nri.mIsNonTerrestrialNetwork; mRejectCause = nri.mRejectCause; mEmergencyOnly = nri.mEmergencyOnly; mAvailableServices = new ArrayList<>(nri.mAvailableServices); @@ -657,6 +665,27 @@ public final class NetworkRegistrationInfo implements Parcelable { return mIsUsingCarrierAggregation; } + /** + * Set whether the network is a non-terrestrial network. + * + * @param isNonTerrestrialNetwork {@code true} if network is a non-terrestrial network + * else {@code false}. + * @hide + */ + public void setIsNonTerrestrialNetwork(boolean isNonTerrestrialNetwork) { + mIsNonTerrestrialNetwork = isNonTerrestrialNetwork; + } + + /** + * Get whether the network is a non-terrestrial network. + * + * @return {@code true} if network is a non-terrestrial network else {@code false}. + * @hide + */ + public boolean isNonTerrestrialNetwork() { + return mIsNonTerrestrialNetwork; + } + /** * @hide */ @@ -769,6 +798,7 @@ public final class NetworkRegistrationInfo implements Parcelable { ? nrStateToString(mNrState) : "****") .append(" rRplmn=").append(mRplmn) .append(" isUsingCarrierAggregation=").append(mIsUsingCarrierAggregation) + .append(" isNonTerrestrialNetwork=").append(mIsNonTerrestrialNetwork) .append("}").toString(); } @@ -777,7 +807,7 @@ public final class NetworkRegistrationInfo implements Parcelable { return Objects.hash(mDomain, mTransportType, mRegistrationState, mNetworkRegistrationState, mRoamingType, mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices, mCellIdentity, mVoiceSpecificInfo, mDataSpecificInfo, mNrState, - mRplmn, mIsUsingCarrierAggregation); + mRplmn, mIsUsingCarrierAggregation, mIsNonTerrestrialNetwork); } @Override @@ -803,7 +833,8 @@ public final class NetworkRegistrationInfo implements Parcelable { && Objects.equals(mVoiceSpecificInfo, other.mVoiceSpecificInfo) && Objects.equals(mDataSpecificInfo, other.mDataSpecificInfo) && TextUtils.equals(mRplmn, other.mRplmn) - && mNrState == other.mNrState; + && mNrState == other.mNrState + && mIsNonTerrestrialNetwork == other.mIsNonTerrestrialNetwork; } /** @@ -827,6 +858,7 @@ public final class NetworkRegistrationInfo implements Parcelable { dest.writeInt(mNrState); dest.writeString(mRplmn); dest.writeBoolean(mIsUsingCarrierAggregation); + dest.writeBoolean(mIsNonTerrestrialNetwork); } /** @@ -936,6 +968,8 @@ public final class NetworkRegistrationInfo implements Parcelable { @Nullable private VoiceSpecificRegistrationInfo mVoiceSpecificRegistrationInfo; + private boolean mIsNonTerrestrialNetwork; + /** * Default constructor for Builder. */ @@ -964,6 +998,7 @@ public final class NetworkRegistrationInfo implements Parcelable { mVoiceSpecificRegistrationInfo = new VoiceSpecificRegistrationInfo( nri.mVoiceSpecificInfo); } + mIsNonTerrestrialNetwork = nri.mIsNonTerrestrialNetwork; } /** @@ -1110,6 +1145,19 @@ public final class NetworkRegistrationInfo implements Parcelable { return this; } + /** + * Set whether the network is a non-terrestrial network. + * + * @param isNonTerrestrialNetwork {@code true} if network is a non-terrestrial network + * else {@code false}. + * @return The builder. + * @hide + */ + public @NonNull Builder setIsNonTerrestrialNetwork(boolean isNonTerrestrialNetwork) { + mIsNonTerrestrialNetwork = isNonTerrestrialNetwork; + return this; + } + /** * Build the NetworkRegistrationInfo. * @return the NetworkRegistrationInfo object. @@ -1120,7 +1168,7 @@ public final class NetworkRegistrationInfo implements Parcelable { return new NetworkRegistrationInfo(mDomain, mTransportType, mNetworkRegistrationState, mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices, mCellIdentity, mRplmn, mVoiceSpecificRegistrationInfo, - mDataSpecificRegistrationInfo); + mDataSpecificRegistrationInfo, mIsNonTerrestrialNetwork); } } } diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index 523d0b0e55f4f6e20ff342d622e43435fd62656f..74cfbea91e002790bff78794435d50130f66ac86 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -2250,4 +2250,19 @@ public class ServiceState implements Parcelable { return false; } } + + /** + * Get whether device is connected to a non-terrestrial network. + * + * @return {@code true} if device is connected to a non-terrestrial network else {@code false}. + * @hide + */ + public boolean isUsingNonTerrestrialNetwork() { + synchronized (mNetworkRegistrationInfos) { + for (NetworkRegistrationInfo nri : mNetworkRegistrationInfos) { + if (nri.isNonTerrestrialNetwork()) return true; + } + } + return false; + } }