Merge "Add the LCE system API"

This commit is contained in:
Kai Shi
2021-03-18 21:23:34 +00:00
committed by Gerrit Code Review
11 changed files with 367 additions and 40 deletions

View File

@@ -9507,6 +9507,19 @@ package android.telephony {
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ImsiEncryptionInfo> CREATOR;
}
public final class LinkCapacityEstimate implements android.os.Parcelable {
ctor public LinkCapacityEstimate(int, int, int);
method public int describeContents();
method public int getDownlinkCapacityKbps();
method public int getType();
method public int getUplinkCapacityKbps();
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.LinkCapacityEstimate> CREATOR;
field public static final int INVALID = -1; // 0xffffffff
field public static final int LCE_TYPE_COMBINED = 2; // 0x2
field public static final int LCE_TYPE_PRIMARY = 0; // 0x0
field public static final int LCE_TYPE_SECONDARY = 1; // 0x1
}
public final class LteVopsSupportInfo implements android.os.Parcelable {
ctor public LteVopsSupportInfo(int, int);
method public int describeContents();
@@ -9983,6 +9996,8 @@ package android.telephony {
field public static final int EVENT_DISPLAY_INFO_CHANGED = 21; // 0x15
field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_EMERGENCY_NUMBER_LIST_CHANGED = 25; // 0x19
field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_IMS_CALL_DISCONNECT_CAUSE_CHANGED = 28; // 0x1c
field @RequiresPermission(android.Manifest.permission.READ_CALL_LOG) public static final int EVENT_LEGACY_CALL_STATE_CHANGED = 36; // 0x24
field @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public static final int EVENT_LINK_CAPACITY_ESTIMATE_CHANGED = 37; // 0x25
field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final int EVENT_MESSAGE_WAITING_INDICATOR_CHANGED = 3; // 0x3
field @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public static final int EVENT_OEM_HOOK_RAW = 15; // 0xf
field @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public static final int EVENT_OUTGOING_EMERGENCY_CALL = 29; // 0x1d
@@ -10013,6 +10028,10 @@ package android.telephony {
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onDataEnabledChanged(boolean, int);
}
public static interface TelephonyCallback.LinkCapacityEstimateChangedListener {
method @RequiresPermission(android.Manifest.permission.READ_PRECISE_PHONE_STATE) public void onLinkCapacityEstimateChanged(@NonNull java.util.List<android.telephony.LinkCapacityEstimate>);
}
public static interface TelephonyCallback.OutgoingEmergencyCallListener {
method @RequiresPermission(android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION) public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
}
@@ -10080,7 +10099,6 @@ package android.telephony {
method @Nullable @RequiresPermission(android.Manifest.permission.INTERACT_ACROSS_USERS) public android.content.ComponentName getAndUpdateDefaultRespondViaMessageApplication();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getCallForwarding(int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CallForwardingInfoCallback);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getCallWaitingStatus(@NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
method @NonNull @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.CarrierBandwidth getCarrierBandwidth();
method @Nullable @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public android.telephony.ImsiEncryptionInfo getCarrierInfoForImsiEncryption(int);
method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
method public java.util.List<java.lang.String> getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int);

View File

@@ -21,7 +21,6 @@ import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.compat.annotation.ChangeId;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Binder;
import android.os.Build;
@@ -1265,6 +1264,8 @@ public class PhoneStateListener {
// default implementation empty
}
/**
* The callback methods need to be called on the handler thread where
* this object was created. If the binder did that for us it'd be nice.
@@ -1579,6 +1580,11 @@ public class PhoneStateListener {
public void onAllowedNetworkTypesChanged(Map allowedNetworkTypesList) {
// default implementation empty
}
public void onLinkCapacityEstimateChanged(
List<LinkCapacityEstimate> linkCapacityEstimateList) {
// default implementation empty
}
}
private void log(String s) {

View File

@@ -24,7 +24,6 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.compat.annotation.ChangeId;
import android.compat.annotation.UnsupportedAppUsage;
import android.os.Binder;
import android.os.Build;
import android.telephony.emergency.EmergencyNumber;
@@ -555,6 +554,33 @@ public class TelephonyCallback {
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
public static final int EVENT_ALLOWED_NETWORK_TYPE_LIST_CHANGED = 35;
/**
* Event for changes to the legacy call state changed listener implemented by
* {@link PhoneStateListener#onCallStateChanged(int, String)}. This listener variant is similar
* to the new {@link CallStateListener#onCallStateChanged(int)} with the important distinction
* that it CAN provide the phone number associated with a call.
*
* @hide
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.READ_CALL_LOG)
public static final int EVENT_LEGACY_CALL_STATE_CHANGED = 36;
/**
* Event for changes to the link capacity estimate (LCE)
*
* <p>Requires permission {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE}
*
* @see LinkCapacityEstimateChangedListener#onLinkCapacityEstimateChanged
*
* @hide
*/
@SystemApi
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
public static final int EVENT_LINK_CAPACITY_ESTIMATE_CHANGED = 37;
/**
* @hide
*/
@@ -593,7 +619,9 @@ public class TelephonyCallback {
EVENT_BARRING_INFO_CHANGED,
EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED,
EVENT_DATA_ENABLED_CHANGED,
EVENT_ALLOWED_NETWORK_TYPE_LIST_CHANGED
EVENT_ALLOWED_NETWORK_TYPE_LIST_CHANGED,
EVENT_LEGACY_CALL_STATE_CHANGED,
EVENT_LINK_CAPACITY_ESTIMATE_CHANGED
})
@Retention(RetentionPolicy.SOURCE)
public @interface TelephonyEvent {
@@ -1360,6 +1388,25 @@ public class TelephonyCallback {
@TelephonyManager.DataEnabledReason int reason);
}
/**
* Interface for link capacity estimate changed listener.
*
* @hide
*/
@SystemApi
public interface LinkCapacityEstimateChangedListener {
/**
* Callback invoked when the link capacity estimate (LCE) changes
*
* @param linkCapacityEstimateList a list of {@link LinkCapacityEstimate}
* The list size is at least 1.
* In case of a dual connected network, the list size could be 2.
* Use {@link LinkCapacityEstimate#getType()} to get the type of each element.
*/
@RequiresPermission(Manifest.permission.READ_PRECISE_PHONE_STATE)
void onLinkCapacityEstimateChanged(
@NonNull List<LinkCapacityEstimate> linkCapacityEstimateList);
}
/**
* The callback methods need to be called on the handler thread where
@@ -1703,5 +1750,16 @@ public class TelephonyCallback {
() -> mExecutor.execute(
() -> listener.onAllowedNetworkTypesChanged(allowedNetworkTypesList)));
}
public void onLinkCapacityEstimateChanged(
List<LinkCapacityEstimate> linkCapacityEstimateList) {
LinkCapacityEstimateChangedListener listener =
(LinkCapacityEstimateChangedListener) mTelephonyCallbackWeakRef.get();
if (listener == null) return;
Binder.withCleanCallingIdentity(
() -> mExecutor.execute(() -> listener.onLinkCapacityEstimateChanged(
linkCapacityEstimateList)));
}
}
}

View File

@@ -840,9 +840,23 @@ public class TelephonyRegistryManager {
}
}
/**
* Notify that the link capacity estimate has changed.
* @param slotIndex for the phone object that gets the updated link capacity estimate
* @param subId for subscription that gets the updated link capacity estimate
* @param linkCapacityEstimateList a list of {@link LinkCapacityEstimate}
*/
public void notifyLinkCapacityEstimateChanged(int slotIndex, int subId,
List<LinkCapacityEstimate> linkCapacityEstimateList) {
try {
sRegistry.notifyLinkCapacityEstimateChanged(slotIndex, subId, linkCapacityEstimateList);
} catch (RemoteException ex) {
// system server crash
}
}
public @NonNull Set<Integer> getEventsFromCallback(
@NonNull TelephonyCallback telephonyCallback) {
Set<Integer> eventList = new ArraySet<>();
if (telephonyCallback instanceof TelephonyCallback.ServiceStateListener) {
@@ -973,6 +987,10 @@ public class TelephonyRegistryManager {
eventList.add(TelephonyCallback.EVENT_ALLOWED_NETWORK_TYPE_LIST_CHANGED);
}
if (telephonyCallback instanceof TelephonyCallback.LinkCapacityEstimateChangedListener) {
eventList.add(TelephonyCallback.EVENT_LINK_CAPACITY_ESTIMATE_CHANGED);
}
return eventList;
}

View File

@@ -21,6 +21,7 @@ import android.telephony.CallAttributes;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
import android.telephony.DataConnectionRealTimeInfo;
import android.telephony.LinkCapacityEstimate;
import android.telephony.TelephonyDisplayInfo;
import android.telephony.PhoneCapability;
import android.telephony.PhysicalChannelConfig;
@@ -72,4 +73,5 @@ oneway interface IPhoneStateListener {
void onPhysicalChannelConfigChanged(in List<PhysicalChannelConfig> configs);
void onDataEnabledChanged(boolean enabled, int reason);
void onAllowedNetworkTypesChanged(in Map allowedNetworkTypeList);
void onLinkCapacityEstimateChanged(in List<LinkCapacityEstimate> linkCapacityEstimateList);
}

View File

@@ -23,6 +23,7 @@ import android.telephony.BarringInfo;
import android.telephony.CallQuality;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
import android.telephony.LinkCapacityEstimate;
import android.telephony.TelephonyDisplayInfo;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.PhoneCapability;
@@ -94,5 +95,8 @@ interface ITelephonyRegistry {
void notifyPhysicalChannelConfigForSubscriber(in int subId,
in List<PhysicalChannelConfig> configs);
void notifyDataEnabled(in int phoneId, int subId, boolean enabled, int reason);
void notifyAllowedNetworkTypesChanged(in int phoneId, in int subId, in Map allowedNetworkTypeList);
void notifyAllowedNetworkTypesChanged(in int phoneId, in int subId,
in Map allowedNetworkTypeList);
void notifyLinkCapacityEstimateChanged(in int phoneId, in int subId,
in List<LinkCapacityEstimate> linkCapacityEstimateList);
}

View File

@@ -60,6 +60,7 @@ import android.telephony.CellSignalStrengthNr;
import android.telephony.CellSignalStrengthTdscdma;
import android.telephony.CellSignalStrengthWcdma;
import android.telephony.DisconnectCause;
import android.telephony.LinkCapacityEstimate;
import android.telephony.LocationAccessPolicy;
import android.telephony.PhoneCapability;
import android.telephony.PhoneStateListener;
@@ -320,6 +321,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
private Map<Integer, Long> mAllowedNetworkTypesList;
private List<List<LinkCapacityEstimate>> mLinkCapacityEstimateLists;
/**
* Per-phone map of precise data connection state. The key of the map is the pair of transport
* type and APN setting. This is the cache to prevent redundant callbacks to the listeners.
@@ -350,6 +353,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
TelephonyCallback.EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED);
REQUIRE_PRECISE_PHONE_STATE_PERMISSION.add(
TelephonyCallback.EVENT_DATA_ENABLED_CHANGED);
REQUIRE_PRECISE_PHONE_STATE_PERMISSION.add(
TelephonyCallback.EVENT_LINK_CAPACITY_ESTIMATE_CHANGED);
}
private boolean isLocationPermissionRequired(Set<Integer> events) {
@@ -535,6 +540,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
cutListToSize(mPreciseDataConnectionStates, mNumPhones);
cutListToSize(mBarringInfo, mNumPhones);
cutListToSize(mPhysicalChannelConfigs, mNumPhones);
cutListToSize(mLinkCapacityEstimateLists, mNumPhones);
return;
}
@@ -571,6 +577,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
mPhysicalChannelConfigs.add(i, new PhysicalChannelConfig.Builder().build());
mIsDataEnabled[i] = false;
mDataEnabledReason[i] = TelephonyManager.DATA_ENABLED_REASON_USER;
mLinkCapacityEstimateLists.add(i, new ArrayList<>());
}
}
@@ -633,6 +640,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
mIsDataEnabled = new boolean[numPhones];
mDataEnabledReason = new int[numPhones];
mAllowedNetworkTypesList = new HashMap<>();
mLinkCapacityEstimateLists = new ArrayList<>();
for (int i = 0; i < numPhones; i++) {
mCallState[i] = TelephonyManager.CALL_STATE_IDLE;
mDataActivity[i] = TelephonyManager.DATA_ACTIVITY_NONE;
@@ -665,6 +673,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
mPhysicalChannelConfigs.add(i, new PhysicalChannelConfig.Builder().build());
mIsDataEnabled[i] = false;
mDataEnabledReason[i] = TelephonyManager.DATA_ENABLED_REASON_USER;
mLinkCapacityEstimateLists.add(i, new ArrayList<>());
}
mAppOps = mContext.getSystemService(AppOpsManager.class);
@@ -1173,6 +1182,17 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
remove(r.binder);
}
}
if (events.contains(
TelephonyCallback.EVENT_LINK_CAPACITY_ESTIMATE_CHANGED)) {
try {
if (mLinkCapacityEstimateLists.get(phoneId) != null) {
r.callback.onLinkCapacityEstimateChanged(mLinkCapacityEstimateLists
.get(phoneId));
}
} catch (RemoteException ex) {
remove(r.binder);
}
}
}
}
}
@@ -2456,6 +2476,42 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
}
/**
* Notify that the link capacity estimate has changed.
* @param phoneId the phone id.
* @param subId the subscription id.
* @param linkCapacityEstimateList a list of {@link LinkCapacityEstimate}
*/
public void notifyLinkCapacityEstimateChanged(int phoneId, int subId,
List<LinkCapacityEstimate> linkCapacityEstimateList) {
if (!checkNotifyPermission("notifyLinkCapacityEstimateChanged()")) {
return;
}
if (VDBG) {
log("notifyLinkCapacityEstimateChanged: linkCapacityEstimateList ="
+ linkCapacityEstimateList);
}
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
mLinkCapacityEstimateLists.set(phoneId, linkCapacityEstimateList);
for (Record r : mRecords) {
if (r.matchTelephonyCallbackEvent(
TelephonyCallback.EVENT_LINK_CAPACITY_ESTIMATE_CHANGED)
&& idMatch(r.subId, subId, phoneId)) {
try {
r.callback.onLinkCapacityEstimateChanged(linkCapacityEstimateList);
} catch (RemoteException ex) {
mRemoveList.add(r.binder);
}
}
}
}
handleRemoveListLocked();
}
}
@Override
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " ");
@@ -2500,6 +2556,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
pw.println("mTelephonyDisplayInfo=" + mTelephonyDisplayInfos[i]);
pw.println("mIsDataEnabled=" + mIsDataEnabled);
pw.println("mDataEnabledReason=" + mDataEnabledReason);
pw.println("mLinkCapacityEstimateList=" + mLinkCapacityEstimateLists.get(i));
pw.decreaseIndent();
}
pw.println("mCarrierNetworkChangeState=" + mCarrierNetworkChangeState);

View File

@@ -0,0 +1,19 @@
/*
* Copyright (C) 2021 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;
parcelable LinkCapacityEstimate;

View File

@@ -0,0 +1,179 @@
/*
* Copyright (C) 2021 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.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
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.Objects;
/**
* Link Capacity Estimate from the modem
* @hide
*/
@SystemApi
public final class LinkCapacityEstimate implements Parcelable {
/** A value indicates that the capacity estimate is not available */
public static final int INVALID = -1;
/**
* LCE for the primary network
*/
public static final int LCE_TYPE_PRIMARY = 0;
/**
* LCE for the secondary network
*/
public static final int LCE_TYPE_SECONDARY = 1;
/**
* Combined LCE for primary network and secondary network reported by the legacy modem
*/
public static final int LCE_TYPE_COMBINED = 2;
/** @hide */
@IntDef(prefix = { "LCE_TYPE_" }, value = {
LCE_TYPE_PRIMARY,
LCE_TYPE_SECONDARY,
LCE_TYPE_COMBINED,
})
@Retention(RetentionPolicy.SOURCE)
public @interface LceType {}
private final @LceType int mType;
/** Downlink capacity estimate in kbps */
private final int mDownlinkCapacityKbps;
/** Uplink capacity estimate in kbps */
private final int mUplinkCapacityKbps;
/**
* Constructor for link capacity estimate
*/
public LinkCapacityEstimate(@LceType int type,
int downlinkCapacityKbps, int uplinkCapacityKbps) {
mDownlinkCapacityKbps = downlinkCapacityKbps;
mUplinkCapacityKbps = uplinkCapacityKbps;
mType = type;
}
/**
* @hide
*/
public LinkCapacityEstimate(Parcel in) {
mDownlinkCapacityKbps = in.readInt();
mUplinkCapacityKbps = in.readInt();
mType = in.readInt();
}
/**
* Retrieves the type of LCE
* @return The type of link capacity estimate
*/
public @LceType int getType() {
return mType;
}
/**
* Retrieves the downlink bandwidth in Kbps.
* This will be {@link #INVALID} if the network is not connected
* @return The estimated first hop downstream (network to device) bandwidth.
*/
public int getDownlinkCapacityKbps() {
return mDownlinkCapacityKbps;
}
/**
* Retrieves the uplink bandwidth in Kbps.
* This will be {@link #INVALID} if the network is not connected
*
* @return The estimated first hop upstream (device to network) bandwidth.
*/
public int getUplinkCapacityKbps() {
return mUplinkCapacityKbps;
}
@Override
public String toString() {
return new StringBuilder()
.append("{mType=")
.append(mType)
.append(", mDownlinkCapacityKbps=")
.append(mDownlinkCapacityKbps)
.append(", mUplinkCapacityKbps=")
.append(mUplinkCapacityKbps)
.append("}")
.toString();
}
/**
* {@link Parcelable#describeContents}
*/
public int describeContents() {
return 0;
}
/**
* {@link Parcelable#writeToParcel}
* @hide
*/
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(mDownlinkCapacityKbps);
dest.writeInt(mUplinkCapacityKbps);
dest.writeInt(mType);
}
@Override
public boolean equals(@Nullable Object o) {
if (o == null || !(o instanceof LinkCapacityEstimate) || hashCode() != o.hashCode()) {
return false;
}
if (this == o) {
return true;
}
LinkCapacityEstimate that = (LinkCapacityEstimate) o;
return mDownlinkCapacityKbps == that.mDownlinkCapacityKbps
&& mUplinkCapacityKbps == that.mUplinkCapacityKbps
&& mType == that.mType;
}
@Override
public int hashCode() {
return Objects.hash(mDownlinkCapacityKbps, mUplinkCapacityKbps, mType);
}
public static final
@android.annotation.NonNull Parcelable.Creator<LinkCapacityEstimate> CREATOR =
new Parcelable.Creator() {
public LinkCapacityEstimate createFromParcel(Parcel in) {
return new LinkCapacityEstimate(in);
}
public LinkCapacityEstimate[] newArray(int size) {
return new LinkCapacityEstimate[size];
}
};
}

View File

@@ -13980,33 +13980,6 @@ public class TelephonyManager {
return PinResult.getDefaultFailedResult();
}
/**
* Get carrier bandwidth. In case of Dual connected network this will report
* bandwidth per primary and secondary network.
* @return CarrierBandwidth with bandwidth of both primary and secondary carrier.
* @throws IllegalStateException if the Telephony process is not currently available.
* @hide
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
@NonNull
public CarrierBandwidth getCarrierBandwidth() {
try {
ITelephony service = getITelephony();
if (service != null) {
return service.getCarrierBandwidth(getSubId());
} else {
throw new IllegalStateException("telephony service is null.");
}
} catch (RemoteException ex) {
Log.e(TAG, "getCarrierBandwidth RemoteException", ex);
ex.rethrowFromSystemServer();
}
//Should not reach. Adding return statement to make compiler happy
return null;
}
/**
* Called when userActivity is signalled in the power manager.
* This should only be called from system Uid.

View File

@@ -31,7 +31,6 @@ import android.service.carrier.CarrierIdentifier;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telephony.CallForwardingInfo;
import android.telephony.CarrierBandwidth;
import android.telephony.CarrierRestrictionRules;
import android.telephony.CellIdentity;
import android.telephony.CellInfo;
@@ -2219,12 +2218,6 @@ interface ITelephony {
*/
boolean isNrDualConnectivityEnabled(int subId);
/**
* Get carrier bandwidth per primary and secondary carrier
* @return CarrierBandwidth with bandwidth of both primary and secondary carrier.
*/
CarrierBandwidth getCarrierBandwidth(int subId);
/**
* Checks whether the device supports the given capability on the radio interface.
*