Merge "Add the LCE system API"
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
19
telephony/java/android/telephony/LinkCapacityEstimate.aidl
Normal file
19
telephony/java/android/telephony/LinkCapacityEstimate.aidl
Normal 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;
|
||||
179
telephony/java/android/telephony/LinkCapacityEstimate.java
Normal file
179
telephony/java/android/telephony/LinkCapacityEstimate.java
Normal 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];
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user