327 lines
11 KiB
Java
327 lines
11 KiB
Java
/*
|
|
* Copyright (C) 2022 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.telephony;
|
|
|
|
import android.annotation.FlaggedApi;
|
|
import android.annotation.NonNull;
|
|
import android.annotation.SystemApi;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
import android.text.TextUtils;
|
|
|
|
import com.android.internal.telephony.flags.Flags;
|
|
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Contains attributes required to determine the domain for a telephony service, including
|
|
* the network registration state.
|
|
*
|
|
* @hide
|
|
*/
|
|
@SystemApi
|
|
@FlaggedApi(Flags.FLAG_USE_OEM_DOMAIN_SELECTION_SERVICE)
|
|
public final class EmergencyRegistrationResult implements Parcelable {
|
|
|
|
/**
|
|
* Indicates the cellular network type of the acquired system.
|
|
*/
|
|
private @AccessNetworkConstants.RadioAccessNetworkType int mAccessNetworkType;
|
|
|
|
/**
|
|
* Registration state of the acquired system.
|
|
*/
|
|
private @NetworkRegistrationInfo.RegistrationState int mRegState;
|
|
|
|
/**
|
|
* EMC domain indicates the current domain of the acquired system.
|
|
*/
|
|
private @NetworkRegistrationInfo.Domain int mDomain;
|
|
|
|
/**
|
|
* Indicates whether the network supports voice over PS network.
|
|
*/
|
|
private boolean mIsVopsSupported;
|
|
|
|
/**
|
|
* This indicates if camped network support VoLTE emergency bearers.
|
|
* This should only be set if the UE is in LTE mode.
|
|
*/
|
|
private boolean mIsEmcBearerSupported;
|
|
|
|
/**
|
|
* The value of the network provided EMC in 5G Registration ACCEPT.
|
|
* This should be set only if the UE is in 5G mode.
|
|
*/
|
|
private int mNwProvidedEmc;
|
|
|
|
/**
|
|
* The value of the network provided EMF(EPS Fallback) in 5G Registration ACCEPT.
|
|
* This should be set only if the UE is in 5G mode.
|
|
*/
|
|
private int mNwProvidedEmf;
|
|
|
|
/** 3-digit Mobile Country Code, 000..999, empty string if unknown. */
|
|
private @NonNull String mMcc;
|
|
|
|
/** 2 or 3-digit Mobile Network Code, 00..999, empty string if unknown. */
|
|
private @NonNull String mMnc;
|
|
|
|
/**
|
|
* The ISO-3166-1 alpha-2 country code equivalent for the network's country code,
|
|
* empty string if unknown.
|
|
*/
|
|
private @NonNull String mCountryIso;
|
|
|
|
/**
|
|
* Constructor
|
|
* @param accessNetwork Indicates the network type of the acquired system.
|
|
* @param regState Indicates the registration state of the acquired system.
|
|
* @param domain Indicates the current domain of the acquired system.
|
|
* @param isVopsSupported Indicates whether the network supports voice over PS network.
|
|
* @param isEmcBearerSupported Indicates if camped network support VoLTE emergency bearers.
|
|
* @param emc The value of the network provided EMC in 5G Registration ACCEPT.
|
|
* @param emf The value of the network provided EMF(EPS Fallback) in 5G Registration ACCEPT.
|
|
* @param mcc Mobile country code, empty string if unknown.
|
|
* @param mnc Mobile network code, empty string if unknown.
|
|
* @param iso The ISO-3166-1 alpha-2 country code equivalent, empty string if unknown.
|
|
* @hide
|
|
*/
|
|
public EmergencyRegistrationResult(
|
|
@AccessNetworkConstants.RadioAccessNetworkType int accessNetwork,
|
|
@NetworkRegistrationInfo.RegistrationState int regState,
|
|
@NetworkRegistrationInfo.Domain int domain,
|
|
boolean isVopsSupported, boolean isEmcBearerSupported, int emc, int emf,
|
|
@NonNull String mcc, @NonNull String mnc, @NonNull String iso) {
|
|
mAccessNetworkType = accessNetwork;
|
|
mRegState = regState;
|
|
mDomain = domain;
|
|
mIsVopsSupported = isVopsSupported;
|
|
mIsEmcBearerSupported = isEmcBearerSupported;
|
|
mNwProvidedEmc = emc;
|
|
mNwProvidedEmf = emf;
|
|
mMcc = mcc;
|
|
mMnc = mnc;
|
|
mCountryIso = iso;
|
|
}
|
|
|
|
/**
|
|
* Copy constructors
|
|
*
|
|
* @param s Source emergency scan result
|
|
* @hide
|
|
*/
|
|
public EmergencyRegistrationResult(@NonNull EmergencyRegistrationResult s) {
|
|
mAccessNetworkType = s.mAccessNetworkType;
|
|
mRegState = s.mRegState;
|
|
mDomain = s.mDomain;
|
|
mIsVopsSupported = s.mIsVopsSupported;
|
|
mIsEmcBearerSupported = s.mIsEmcBearerSupported;
|
|
mNwProvidedEmc = s.mNwProvidedEmc;
|
|
mNwProvidedEmf = s.mNwProvidedEmf;
|
|
mMcc = s.mMcc;
|
|
mMnc = s.mMnc;
|
|
mCountryIso = s.mCountryIso;
|
|
}
|
|
|
|
/**
|
|
* Construct a EmergencyRegistrationResult object from the given parcel.
|
|
*/
|
|
private EmergencyRegistrationResult(@NonNull Parcel in) {
|
|
readFromParcel(in);
|
|
}
|
|
|
|
/**
|
|
* Returns the cellular access network type of the acquired system.
|
|
*
|
|
* @return the cellular network type.
|
|
*/
|
|
public @AccessNetworkConstants.RadioAccessNetworkType int getAccessNetwork() {
|
|
return mAccessNetworkType;
|
|
}
|
|
|
|
/**
|
|
* Returns the registration state of the acquired system.
|
|
*
|
|
* @return the registration state.
|
|
*/
|
|
public @NetworkRegistrationInfo.RegistrationState int getRegState() {
|
|
return mRegState;
|
|
}
|
|
|
|
/**
|
|
* Returns the current domain of the acquired system.
|
|
*
|
|
* @return the current domain.
|
|
*/
|
|
public @NetworkRegistrationInfo.Domain int getDomain() {
|
|
return mDomain;
|
|
}
|
|
|
|
/**
|
|
* Returns whether the network supports voice over PS network.
|
|
*
|
|
* @return {@code true} if the network supports voice over PS network.
|
|
*/
|
|
public boolean isVopsSupported() {
|
|
return mIsVopsSupported;
|
|
}
|
|
|
|
/**
|
|
* Returns whether camped network support VoLTE emergency bearers.
|
|
* This is not valid if the UE is not in LTE mode.
|
|
*
|
|
* @return {@code true} if the network supports VoLTE emergency bearers.
|
|
*/
|
|
public boolean isEmcBearerSupported() {
|
|
return mIsEmcBearerSupported;
|
|
}
|
|
|
|
/**
|
|
* Returns the value of the network provided EMC in 5G Registration ACCEPT.
|
|
* This is not valid if UE is not in 5G mode.
|
|
*
|
|
* @return the value of the network provided EMC.
|
|
*/
|
|
public int getNwProvidedEmc() {
|
|
return mNwProvidedEmc;
|
|
}
|
|
|
|
/**
|
|
* Returns the value of the network provided EMF(EPS Fallback) in 5G Registration ACCEPT.
|
|
* This is not valid if UE is not in 5G mode.
|
|
*
|
|
* @return the value of the network provided EMF.
|
|
*/
|
|
public int getNwProvidedEmf() {
|
|
return mNwProvidedEmf;
|
|
}
|
|
|
|
/**
|
|
* Returns 3-digit Mobile Country Code.
|
|
*
|
|
* @return Mobile Country Code.
|
|
*/
|
|
public @NonNull String getMcc() {
|
|
return mMcc;
|
|
}
|
|
|
|
/**
|
|
* Returns 2 or 3-digit Mobile Network Code.
|
|
*
|
|
* @return Mobile Network Code.
|
|
*/
|
|
public @NonNull String getMnc() {
|
|
return mMnc;
|
|
}
|
|
|
|
/**
|
|
* Returns the ISO-3166-1 alpha-2 country code is provided in lowercase 2 character format.
|
|
*
|
|
* @return Country code.
|
|
*/
|
|
public @NonNull String getCountryIso() {
|
|
return mCountryIso;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull String toString() {
|
|
return "{ accessNetwork="
|
|
+ AccessNetworkConstants.AccessNetworkType.toString(mAccessNetworkType)
|
|
+ ", regState=" + NetworkRegistrationInfo.registrationStateToString(mRegState)
|
|
+ ", domain=" + NetworkRegistrationInfo.domainToString(mDomain)
|
|
+ ", vops=" + mIsVopsSupported
|
|
+ ", emcBearer=" + mIsEmcBearerSupported
|
|
+ ", emc=" + mNwProvidedEmc
|
|
+ ", emf=" + mNwProvidedEmf
|
|
+ ", mcc=" + mMcc
|
|
+ ", mnc=" + mMnc
|
|
+ ", iso=" + mCountryIso
|
|
+ " }";
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object o) {
|
|
if (this == o) return true;
|
|
if (o == null || getClass() != o.getClass()) return false;
|
|
EmergencyRegistrationResult that = (EmergencyRegistrationResult) o;
|
|
return mAccessNetworkType == that.mAccessNetworkType
|
|
&& mRegState == that.mRegState
|
|
&& mDomain == that.mDomain
|
|
&& mIsVopsSupported == that.mIsVopsSupported
|
|
&& mIsEmcBearerSupported == that.mIsEmcBearerSupported
|
|
&& mNwProvidedEmc == that.mNwProvidedEmc
|
|
&& mNwProvidedEmf == that.mNwProvidedEmf
|
|
&& TextUtils.equals(mMcc, that.mMcc)
|
|
&& TextUtils.equals(mMnc, that.mMnc)
|
|
&& TextUtils.equals(mCountryIso, that.mCountryIso);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(mAccessNetworkType, mRegState, mDomain,
|
|
mIsVopsSupported, mIsEmcBearerSupported,
|
|
mNwProvidedEmc, mNwProvidedEmf,
|
|
mMcc, mMnc, mCountryIso);
|
|
}
|
|
|
|
@Override
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(@NonNull Parcel out, int flags) {
|
|
out.writeInt(mAccessNetworkType);
|
|
out.writeInt(mRegState);
|
|
out.writeInt(mDomain);
|
|
out.writeBoolean(mIsVopsSupported);
|
|
out.writeBoolean(mIsEmcBearerSupported);
|
|
out.writeInt(mNwProvidedEmc);
|
|
out.writeInt(mNwProvidedEmf);
|
|
out.writeString8(mMcc);
|
|
out.writeString8(mMnc);
|
|
out.writeString8(mCountryIso);
|
|
}
|
|
|
|
private void readFromParcel(@NonNull Parcel in) {
|
|
mAccessNetworkType = in.readInt();
|
|
mRegState = in.readInt();
|
|
mDomain = in.readInt();
|
|
mIsVopsSupported = in.readBoolean();
|
|
mIsEmcBearerSupported = in.readBoolean();
|
|
mNwProvidedEmc = in.readInt();
|
|
mNwProvidedEmf = in.readInt();
|
|
mMcc = in.readString8();
|
|
mMnc = in.readString8();
|
|
mCountryIso = in.readString8();
|
|
}
|
|
|
|
public static final @NonNull Creator<EmergencyRegistrationResult> CREATOR =
|
|
new Creator<EmergencyRegistrationResult>() {
|
|
@Override
|
|
public EmergencyRegistrationResult createFromParcel(@NonNull Parcel in) {
|
|
return new EmergencyRegistrationResult(in);
|
|
}
|
|
|
|
@Override
|
|
public EmergencyRegistrationResult[] newArray(int size) {
|
|
return new EmergencyRegistrationResult[size];
|
|
}
|
|
};
|
|
}
|