From 0c13fd19ecbb60c328a95e3c1620e03c7c8826cd Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Sun, 17 Jan 2021 21:13:18 +0800 Subject: Add getPhoneCapability function in TelephonyManager - Add a resource for Device's Nr information. - Expose below as systemApi - getDeviceNrCapabilityBitmask() - getMaxActiveInternetData() - getMaxActivePacketSwitchedVoiceCalls() Bug: 175711587 Test: atest TelephonyManager#testGetPhoneCapability atest PhoneCapabilityTest atest PhoneConfigurationManagerTest atest CellularNetworkValidatorTest atest PhoneSwitcherTest atest TelephonyRegistryTest atest PhoneCapabilityTest Change-Id: Ide25344787c15b3a57a9e6621766ad02a906f12e Merged-In: Ide25344787c15b3a57a9e6621766ad02a906f12e --- core/api/current.txt | 6 - core/api/system-current.txt | 13 ++ core/res/res/values/config.xml | 5 + core/res/res/values/symbols.xml | 3 + .../java/android/telephony/PhoneCapability.java | 208 ++++++++++++++++----- .../java/android/telephony/TelephonyManager.java | 28 +++ .../com/android/internal/telephony/ITelephony.aidl | 6 + 7 files changed, 220 insertions(+), 49 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index fb7d986a3138..64976fac21f2 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -40287,12 +40287,6 @@ package android.telephony { field public static final int SCAN_TYPE_PERIODIC = 1; // 0x1 } - public final class PhoneCapability implements android.os.Parcelable { - method public int describeContents(); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator CREATOR; - } - public class PhoneNumberFormattingTextWatcher implements android.text.TextWatcher { ctor public PhoneNumberFormattingTextWatcher(); ctor public PhoneNumberFormattingTextWatcher(String); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 383684a6b4f2..a84f00e50cf5 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -9753,6 +9753,18 @@ package android.telephony { field public static final int REASON_UNSPECIFIED = 0; // 0x0 } + public final class PhoneCapability implements android.os.Parcelable { + method public int describeContents(); + method public int getDeviceNrCapabilityBitmask(); + method @IntRange(from=1) public int getMaxActiveInternetData(); + method @IntRange(from=1) public int getMaxActivePacketSwitchedVoiceCalls(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + field public static final int DEVICE_NR_CAPABILITY_NONE = 0; // 0x0 + field public static final int DEVICE_NR_CAPABILITY_NSA = 1; // 0x1 + field public static final int DEVICE_NR_CAPABILITY_SA = 2; // 0x2 + } + public final class PhoneNumberRange implements android.os.Parcelable { ctor public PhoneNumberRange(@NonNull String, @NonNull String, @NonNull String, @NonNull String); method public int describeContents(); @@ -10272,6 +10284,7 @@ package android.telephony { method public int getMaxNumberOfSimultaneouslyActiveSims(); method public static long getMaxNumberVerificationTimeoutMillis(); method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String[] getMergedImsisFromGroup(); + method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.PhoneCapability getPhoneCapability(); method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public long getPreferredNetworkTypeBitmask(); method @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public int getRadioPowerState(); method public int getSimApplicationState(); diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 6f5fbae65be6..564991099899 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -4426,4 +4426,9 @@ true + + + false + + false diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index c50c494f5656..9e44a9f83e15 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -4075,4 +4075,7 @@ + + + diff --git a/telephony/java/android/telephony/PhoneCapability.java b/telephony/java/android/telephony/PhoneCapability.java index 6571858fc4ae..30480d14e453 100644 --- a/telephony/java/android/telephony/PhoneCapability.java +++ b/telephony/java/android/telephony/PhoneCapability.java @@ -16,19 +16,26 @@ package android.telephony; +import android.annotation.IntDef; +import android.annotation.IntRange; import android.annotation.NonNull; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Objects; /** - * Define capability of a modem group. That is, the capabilities - * are shared between those modems defined by list of modem IDs. + * Phone capability which describes the data connection capability of modem. + * It's used to evaluate possible phone config change, for example from single + * SIM device to multi-SIM device. + * @hide */ +@SystemApi public final class PhoneCapability implements Parcelable { // Hardcoded default DSDS capability. /** @hide */ @@ -37,6 +44,38 @@ public final class PhoneCapability implements Parcelable { /** @hide */ public static final PhoneCapability DEFAULT_SSSS_CAPABILITY; + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = { "DEVICE_NR_CAPABILITY_" }, value = { + DEVICE_NR_CAPABILITY_NONE, + DEVICE_NR_CAPABILITY_NSA, + DEVICE_NR_CAPABILITY_SA, + }) + public @interface DeviceNrCapability {} + + /** + * Indicates DEVICE_NR_CAPABILITY_NONE determine that the device does not enable 5G NR. + * @hide + */ + @SystemApi + public static final int DEVICE_NR_CAPABILITY_NONE = 0; + + /** + * Indicates DEVICE_NR_CAPABILITY_NSA determine that the device enable the non-standalone + * (NSA) mode of 5G NR. + * @hide + */ + @SystemApi + public static final int DEVICE_NR_CAPABILITY_NSA = 1 << 0; + + /** + * Indicates DEVICE_NR_CAPABILITY_SA determine that the device enable the standalone (SA) + * mode of 5G NR. + * @hide + */ + @SystemApi + public static final int DEVICE_NR_CAPABILITY_SA = 1 << 1; + static { ModemInfo modemInfo1 = new ModemInfo(0, 0, true, true); ModemInfo modemInfo2 = new ModemInfo(1, 0, true, true); @@ -44,55 +83,85 @@ public final class PhoneCapability implements Parcelable { List logicalModemList = new ArrayList<>(); logicalModemList.add(modemInfo1); logicalModemList.add(modemInfo2); - DEFAULT_DSDS_CAPABILITY = new PhoneCapability(1, 1, 0, logicalModemList, false); + DEFAULT_DSDS_CAPABILITY = new PhoneCapability(1, 1, logicalModemList, false, + DEVICE_NR_CAPABILITY_NONE); logicalModemList = new ArrayList<>(); logicalModemList.add(modemInfo1); - DEFAULT_SSSS_CAPABILITY = new PhoneCapability(1, 1, 0, logicalModemList, false); + DEFAULT_SSSS_CAPABILITY = new PhoneCapability(1, 1, logicalModemList, false, + DEVICE_NR_CAPABILITY_NONE); } + /** + * MaxActivePsVoice defines the maximum number of active voice calls. For a dual sim dual + * standby (DSDS) modem it would be one, but for a dual sim dual active modem it would be 2. + * + * @hide + */ + private final int mMaxActivePsVoice; + + /** + * MaxActiveInternetData defines how many logical modems can have + * PS attached simultaneously. For example, for L+L modem it + * should be 2. + * + * @hide + */ + private final int mMaxActiveInternetData; + + /** + * Whether modem supports both internet PDN up so + * that we can do ping test before tearing down the + * other one. + * + * @hide + */ + private final boolean mNetworkValidationBeforeSwitchSupported; + /** @hide */ - public final int maxActiveVoiceCalls; - /** @hide */ - public final int maxActiveData; - /** @hide */ - public final int max5G; - /** @hide */ - public final boolean validationBeforeSwitchSupported; - /** @hide */ - public final List logicalModemList; + private final List mLogicalModemList; + + /** + * List of logical modem information. + * + * @hide + */ + private final int mDeviceNrCapability; /** @hide */ - public PhoneCapability(int maxActiveVoiceCalls, int maxActiveData, int max5G, - List logicalModemList, boolean validationBeforeSwitchSupported) { - this.maxActiveVoiceCalls = maxActiveVoiceCalls; - this.maxActiveData = maxActiveData; - this.max5G = max5G; + public PhoneCapability(int maxActivePsVoice, int maxActiveInternetData, + List logicalModemList, boolean networkValidationBeforeSwitchSupported, + int deviceNrCapability) { + this.mMaxActivePsVoice = maxActivePsVoice; + this.mMaxActiveInternetData = maxActiveInternetData; // Make sure it's not null. - this.logicalModemList = logicalModemList == null ? new ArrayList<>() : logicalModemList; - this.validationBeforeSwitchSupported = validationBeforeSwitchSupported; + this.mLogicalModemList = logicalModemList == null ? new ArrayList<>() : logicalModemList; + this.mNetworkValidationBeforeSwitchSupported = networkValidationBeforeSwitchSupported; + this.mDeviceNrCapability = deviceNrCapability; } @Override public String toString() { - return "maxActiveVoiceCalls=" + maxActiveVoiceCalls + " maxActiveData=" + maxActiveData - + " max5G=" + max5G + "logicalModemList:" - + Arrays.toString(logicalModemList.toArray()); + return "mMaxActivePsVoice=" + mMaxActivePsVoice + + " mMaxActiveInternetData=" + mMaxActiveInternetData + + " mNetworkValidationBeforeSwitchSupported=" + + mNetworkValidationBeforeSwitchSupported + + " mDeviceNrCapability " + mDeviceNrCapability; } private PhoneCapability(Parcel in) { - maxActiveVoiceCalls = in.readInt(); - maxActiveData = in.readInt(); - max5G = in.readInt(); - validationBeforeSwitchSupported = in.readBoolean(); - logicalModemList = new ArrayList<>(); - in.readList(logicalModemList, ModemInfo.class.getClassLoader()); + mMaxActivePsVoice = in.readInt(); + mMaxActiveInternetData = in.readInt(); + mNetworkValidationBeforeSwitchSupported = in.readBoolean(); + mLogicalModemList = new ArrayList<>(); + in.readList(mLogicalModemList, ModemInfo.class.getClassLoader()); + mDeviceNrCapability = in.readInt(); } @Override public int hashCode() { - return Objects.hash(maxActiveVoiceCalls, maxActiveData, max5G, logicalModemList, - validationBeforeSwitchSupported); + return Objects.hash(mMaxActivePsVoice, mMaxActiveInternetData, mLogicalModemList, + mNetworkValidationBeforeSwitchSupported, mDeviceNrCapability); } @Override @@ -107,11 +176,12 @@ public final class PhoneCapability implements Parcelable { PhoneCapability s = (PhoneCapability) o; - return (maxActiveVoiceCalls == s.maxActiveVoiceCalls - && maxActiveData == s.maxActiveData - && max5G == s.max5G - && validationBeforeSwitchSupported == s.validationBeforeSwitchSupported - && logicalModemList.equals(s.logicalModemList)); + return (mMaxActivePsVoice == s.mMaxActivePsVoice + && mMaxActiveInternetData == s.mMaxActiveInternetData + && mNetworkValidationBeforeSwitchSupported + == s.mNetworkValidationBeforeSwitchSupported + && mLogicalModemList.equals(s.mLogicalModemList) + && mDeviceNrCapability == s.mDeviceNrCapability); } /** @@ -125,14 +195,15 @@ public final class PhoneCapability implements Parcelable { * {@link Parcelable#writeToParcel} */ public void writeToParcel(@NonNull Parcel dest, @Parcelable.WriteFlags int flags) { - dest.writeInt(maxActiveVoiceCalls); - dest.writeInt(maxActiveData); - dest.writeInt(max5G); - dest.writeBoolean(validationBeforeSwitchSupported); - dest.writeList(logicalModemList); + dest.writeInt(mMaxActivePsVoice); + dest.writeInt(mMaxActiveInternetData); + dest.writeBoolean(mNetworkValidationBeforeSwitchSupported); + dest.writeList(mLogicalModemList); + dest.writeInt(mDeviceNrCapability); } - public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() { + public static final @android.annotation.NonNull Parcelable.Creator CREATOR = + new Parcelable.Creator() { public PhoneCapability createFromParcel(Parcel in) { return new PhoneCapability(in); } @@ -141,4 +212,55 @@ public final class PhoneCapability implements Parcelable { return new PhoneCapability[size]; } }; + + /** + * @return the maximum number of active packet-switched calls. For a dual + * sim dual standby (DSDS) modem it would be one, but for a dual sim dual active modem it + * would be 2. + * @hide + */ + @SystemApi + public @IntRange(from = 1) int getMaxActivePacketSwitchedVoiceCalls() { + return mMaxActivePsVoice; + } + + /** + * @return MaxActiveInternetData defines how many logical modems can have PS attached + * simultaneously. + * For example, for L+L modem it should be 2. + * @hide + */ + @SystemApi + public @IntRange(from = 1) int getMaxActiveInternetData() { + return mMaxActiveInternetData; + } + + /** + * @return Check whether the Citizens Broadband Radio Service(CBRS) network validation before + * CBRS switch is supported or not. + * + * @hide + */ + public boolean isNetworkValidationBeforeSwitchSupported() { + return mNetworkValidationBeforeSwitchSupported; + } + + /** + * @return The list of logical modem information. + * @hide + */ + public List getLogicalModemList() { + return mLogicalModemList; + } + + /** + * Return the device's NR capability. + * + * @return {@link DeviceNrCapability} the device's NR capability. + * @hide + */ + @SystemApi + public @DeviceNrCapability int getDeviceNrCapabilityBitmask() { + return mDeviceNrCapability; + } } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index c7761605fc7b..4189784bf5e0 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -15065,4 +15065,32 @@ public class TelephonyManager { } return PREPARE_UNATTENDED_REBOOT_ERROR; } + + /** + * Gets the current phone capability. + * + * @return the PhoneCapability which describes the data connection capability of modem. + * It's used to evaluate possible phone config change, for example from single + * SIM device to multi-SIM device. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) + public @NonNull PhoneCapability getPhoneCapability() { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.getPhoneCapability(); + } else { + throw new IllegalStateException("telephony service is null."); + } + } catch (RemoteException ex) { + ex.rethrowAsRuntimeException(); + } + if (getActiveModemCount() > 1) { + return PhoneCapability.DEFAULT_DSDS_CAPABILITY; + } else { + return PhoneCapability.DEFAULT_SSSS_CAPABILITY; + } + } } diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 374aedaf3c71..9b2f119ac77d 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -43,6 +43,7 @@ import android.telephony.ICellInfoCallback; import android.telephony.ModemActivityInfo; import android.telephony.NeighboringCellInfo; import android.telephony.NetworkScanRequest; +import android.telephony.PhoneCapability; import android.telephony.PhoneNumberRange; import android.telephony.RadioAccessFamily; import android.telephony.RadioAccessSpecifier; @@ -2440,4 +2441,9 @@ interface ITelephony { * of error. */ int prepareForUnattendedReboot(); + + /** + * Gets the current phone capability. + */ + PhoneCapability getPhoneCapability(); } -- cgit v1.2.3-59-g8ed1b From 4a66d8e5428223fede7049e8b465cac94309b9ac Mon Sep 17 00:00:00 2001 From: SongFerngWang Date: Wed, 10 Mar 2021 21:05:06 +0800 Subject: Changing DEVICE_NR_CAPABILITY type and renaming getMaxActiveInternetData DEVICE_NR_CAPABILITY_*: Using int array instead of bitmask Rename getMaxActiveInternetData and remove SystemAPI Rename getMaxActivePacketSwitchedVoiceCalls Bug: 180419672 Test: atest CtsTelephonyTestCases:android.telephony.cts.TelephonyManagerTest#testGetPhoneCapabilityAndVerify atest CellularNetworkValidatorTest atest PhoneCapabilityTest atest PhoneSwitcherTest atest TelephonyRegistryTest Change-Id: Ia394537ec57900a410b283ddffdcead017e6d9c6 Merged-In: Ia394537ec57900a410b283ddffdcead017e6d9c6 --- core/api/system-current.txt | 7 +- .../java/android/telephony/PhoneCapability.java | 105 +++++++++++---------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index a84f00e50cf5..1648e7f66c72 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -9755,12 +9755,11 @@ package android.telephony { public final class PhoneCapability implements android.os.Parcelable { method public int describeContents(); - method public int getDeviceNrCapabilityBitmask(); - method @IntRange(from=1) public int getMaxActiveInternetData(); - method @IntRange(from=1) public int getMaxActivePacketSwitchedVoiceCalls(); + method @NonNull public int[] getDeviceNrCapabilities(); + method @IntRange(from=1) public int getMaxActiveDataSubscriptions(); + method @IntRange(from=1) public int getMaxActiveVoiceSubscriptions(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator CREATOR; - field public static final int DEVICE_NR_CAPABILITY_NONE = 0; // 0x0 field public static final int DEVICE_NR_CAPABILITY_NSA = 1; // 0x1 field public static final int DEVICE_NR_CAPABILITY_SA = 2; // 0x2 } diff --git a/telephony/java/android/telephony/PhoneCapability.java b/telephony/java/android/telephony/PhoneCapability.java index 30480d14e453..a3aaf61a6fec 100644 --- a/telephony/java/android/telephony/PhoneCapability.java +++ b/telephony/java/android/telephony/PhoneCapability.java @@ -26,6 +26,7 @@ import android.os.Parcelable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -47,26 +48,18 @@ public final class PhoneCapability implements Parcelable { /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "DEVICE_NR_CAPABILITY_" }, value = { - DEVICE_NR_CAPABILITY_NONE, DEVICE_NR_CAPABILITY_NSA, DEVICE_NR_CAPABILITY_SA, }) public @interface DeviceNrCapability {} - /** - * Indicates DEVICE_NR_CAPABILITY_NONE determine that the device does not enable 5G NR. - * @hide - */ - @SystemApi - public static final int DEVICE_NR_CAPABILITY_NONE = 0; - /** * Indicates DEVICE_NR_CAPABILITY_NSA determine that the device enable the non-standalone * (NSA) mode of 5G NR. * @hide */ @SystemApi - public static final int DEVICE_NR_CAPABILITY_NSA = 1 << 0; + public static final int DEVICE_NR_CAPABILITY_NSA = 1; /** * Indicates DEVICE_NR_CAPABILITY_SA determine that the device enable the standalone (SA) @@ -74,7 +67,7 @@ public final class PhoneCapability implements Parcelable { * @hide */ @SystemApi - public static final int DEVICE_NR_CAPABILITY_SA = 1 << 1; + public static final int DEVICE_NR_CAPABILITY_SA = 2; static { ModemInfo modemInfo1 = new ModemInfo(0, 0, true, true); @@ -83,31 +76,34 @@ public final class PhoneCapability implements Parcelable { List logicalModemList = new ArrayList<>(); logicalModemList.add(modemInfo1); logicalModemList.add(modemInfo2); + int[] deviceNrCapabilities = new int[0]; + DEFAULT_DSDS_CAPABILITY = new PhoneCapability(1, 1, logicalModemList, false, - DEVICE_NR_CAPABILITY_NONE); + deviceNrCapabilities); logicalModemList = new ArrayList<>(); logicalModemList.add(modemInfo1); DEFAULT_SSSS_CAPABILITY = new PhoneCapability(1, 1, logicalModemList, false, - DEVICE_NR_CAPABILITY_NONE); + deviceNrCapabilities); } /** - * MaxActivePsVoice defines the maximum number of active voice calls. For a dual sim dual - * standby (DSDS) modem it would be one, but for a dual sim dual active modem it would be 2. + * mMaxActiveVoiceSubscriptions defines the maximum subscriptions that can support + * simultaneous voice calls. For a dual sim dual standby (DSDS) device it would be one, but + * for a dual sim dual active device it would be 2. * * @hide */ - private final int mMaxActivePsVoice; + private final int mMaxActiveVoiceSubscriptions; /** - * MaxActiveInternetData defines how many logical modems can have - * PS attached simultaneously. For example, for L+L modem it - * should be 2. + * mMaxActiveDataSubscriptions defines the maximum subscriptions that can support + * simultaneous data connections. + * For example, for L+L device it should be 2. * * @hide */ - private final int mMaxActiveInternetData; + private final int mMaxActiveDataSubscriptions; /** * Whether modem supports both internet PDN up so @@ -126,42 +122,45 @@ public final class PhoneCapability implements Parcelable { * * @hide */ - private final int mDeviceNrCapability; + private final int[] mDeviceNrCapabilities; /** @hide */ - public PhoneCapability(int maxActivePsVoice, int maxActiveInternetData, + public PhoneCapability(int maxActiveVoiceSubscriptions, int maxActiveDataSubscriptions, List logicalModemList, boolean networkValidationBeforeSwitchSupported, - int deviceNrCapability) { - this.mMaxActivePsVoice = maxActivePsVoice; - this.mMaxActiveInternetData = maxActiveInternetData; + int[] deviceNrCapabilities) { + this.mMaxActiveVoiceSubscriptions = maxActiveVoiceSubscriptions; + this.mMaxActiveDataSubscriptions = maxActiveDataSubscriptions; // Make sure it's not null. this.mLogicalModemList = logicalModemList == null ? new ArrayList<>() : logicalModemList; this.mNetworkValidationBeforeSwitchSupported = networkValidationBeforeSwitchSupported; - this.mDeviceNrCapability = deviceNrCapability; + this.mDeviceNrCapabilities = deviceNrCapabilities; } @Override public String toString() { - return "mMaxActivePsVoice=" + mMaxActivePsVoice - + " mMaxActiveInternetData=" + mMaxActiveInternetData + return "mMaxActiveVoiceSubscriptions=" + mMaxActiveVoiceSubscriptions + + " mMaxActiveDataSubscriptions=" + mMaxActiveDataSubscriptions + " mNetworkValidationBeforeSwitchSupported=" + mNetworkValidationBeforeSwitchSupported - + " mDeviceNrCapability " + mDeviceNrCapability; + + " mDeviceNrCapability " + Arrays.toString(mDeviceNrCapabilities); } private PhoneCapability(Parcel in) { - mMaxActivePsVoice = in.readInt(); - mMaxActiveInternetData = in.readInt(); + mMaxActiveVoiceSubscriptions = in.readInt(); + mMaxActiveDataSubscriptions = in.readInt(); mNetworkValidationBeforeSwitchSupported = in.readBoolean(); mLogicalModemList = new ArrayList<>(); in.readList(mLogicalModemList, ModemInfo.class.getClassLoader()); - mDeviceNrCapability = in.readInt(); + mDeviceNrCapabilities = in.createIntArray(); } @Override public int hashCode() { - return Objects.hash(mMaxActivePsVoice, mMaxActiveInternetData, mLogicalModemList, - mNetworkValidationBeforeSwitchSupported, mDeviceNrCapability); + return Objects.hash(mMaxActiveVoiceSubscriptions, + mMaxActiveDataSubscriptions, + mLogicalModemList, + mNetworkValidationBeforeSwitchSupported, + Arrays.hashCode(mDeviceNrCapabilities)); } @Override @@ -176,12 +175,12 @@ public final class PhoneCapability implements Parcelable { PhoneCapability s = (PhoneCapability) o; - return (mMaxActivePsVoice == s.mMaxActivePsVoice - && mMaxActiveInternetData == s.mMaxActiveInternetData + return (mMaxActiveVoiceSubscriptions == s.mMaxActiveVoiceSubscriptions + && mMaxActiveDataSubscriptions == s.mMaxActiveDataSubscriptions && mNetworkValidationBeforeSwitchSupported == s.mNetworkValidationBeforeSwitchSupported && mLogicalModemList.equals(s.mLogicalModemList) - && mDeviceNrCapability == s.mDeviceNrCapability); + && Arrays.equals(mDeviceNrCapabilities, s.mDeviceNrCapabilities)); } /** @@ -195,11 +194,11 @@ public final class PhoneCapability implements Parcelable { * {@link Parcelable#writeToParcel} */ public void writeToParcel(@NonNull Parcel dest, @Parcelable.WriteFlags int flags) { - dest.writeInt(mMaxActivePsVoice); - dest.writeInt(mMaxActiveInternetData); + dest.writeInt(mMaxActiveVoiceSubscriptions); + dest.writeInt(mMaxActiveDataSubscriptions); dest.writeBoolean(mNetworkValidationBeforeSwitchSupported); dest.writeList(mLogicalModemList); - dest.writeInt(mDeviceNrCapability); + dest.writeIntArray(mDeviceNrCapabilities); } public static final @android.annotation.NonNull Parcelable.Creator CREATOR = @@ -214,25 +213,24 @@ public final class PhoneCapability implements Parcelable { }; /** - * @return the maximum number of active packet-switched calls. For a dual - * sim dual standby (DSDS) modem it would be one, but for a dual sim dual active modem it + * @return the maximum subscriptions that can support simultaneous voice calls. For a dual + * sim dual standby (DSDS) device it would be one, but for a dual sim dual active device it * would be 2. * @hide */ @SystemApi - public @IntRange(from = 1) int getMaxActivePacketSwitchedVoiceCalls() { - return mMaxActivePsVoice; + public @IntRange(from = 1) int getMaxActiveVoiceSubscriptions() { + return mMaxActiveVoiceSubscriptions; } /** - * @return MaxActiveInternetData defines how many logical modems can have PS attached - * simultaneously. - * For example, for L+L modem it should be 2. + * @return the maximum subscriptions that can support simultaneous data connections. + * For example, for L+L device it should be 2. * @hide */ @SystemApi - public @IntRange(from = 1) int getMaxActiveInternetData() { - return mMaxActiveInternetData; + public @IntRange(from = 1) int getMaxActiveDataSubscriptions() { + return mMaxActiveDataSubscriptions; } /** @@ -254,13 +252,16 @@ public final class PhoneCapability implements Parcelable { } /** - * Return the device's NR capability. + * Return List of the device's NR capability. If the device doesn't support NR capability, + * then this api return empty array. + * @see DEVICE_NR_CAPABILITY_NSA + * @see DEVICE_NR_CAPABILITY_SA * - * @return {@link DeviceNrCapability} the device's NR capability. + * @return List of the device's NR capability. * @hide */ @SystemApi - public @DeviceNrCapability int getDeviceNrCapabilityBitmask() { - return mDeviceNrCapability; + public @NonNull @DeviceNrCapability int[] getDeviceNrCapabilities() { + return mDeviceNrCapabilities == null ? (new int[0]) : mDeviceNrCapabilities; } } -- cgit v1.2.3-59-g8ed1b