From a9d9b021beace2d6b53bf2b7c0ff502995b75ca9 Mon Sep 17 00:00:00 2001 From: Eric Schwarzenbach Date: Wed, 10 Jan 2018 11:33:52 -0800 Subject: [PATCH] Update CellInfo API to accomodate new fields. Adds CellConnectionStatus to top level CellInfo type. Adds cell bandwidth to the CellIdentityLte. Bug: 72117223 Test: runtest frameworks-telephony Change-Id: Id5f3b5a2bd4119c099f5e739d5579974e7adc897 --- api/current.txt | 6 +++ .../java/android/telephony/CellIdentityLte.java | 28 ++++++++-- telephony/java/android/telephony/CellInfo.java | 60 +++++++++++++++++++++- 3 files changed, 87 insertions(+), 7 deletions(-) diff --git a/api/current.txt b/api/current.txt index 33d3bb97c6b6..3d18f9fc0953 100644 --- a/api/current.txt +++ b/api/current.txt @@ -40174,6 +40174,7 @@ package android.telephony { } public final class CellIdentityLte extends android.telephony.CellIdentity { + method public int getBandwidth(); method public int getCi(); method public int getEarfcn(); method public deprecated int getMcc(); @@ -40217,8 +40218,13 @@ package android.telephony { public abstract class CellInfo implements android.os.Parcelable { method public int describeContents(); + method public int getCellConnectionStatus(); method public long getTimeStamp(); method public boolean isRegistered(); + field public static final int CONNECTION_NONE = 0; // 0x0 + field public static final int CONNECTION_PRIMARY_SERVING = 1; // 0x1 + field public static final int CONNECTION_SECONDARY_SERVING = 2; // 0x2 + field public static final int CONNECTION_UNKNOWN = 2147483647; // 0x7fffffff field public static final android.os.Parcelable.Creator CREATOR; } diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java index 7f20c8ae5f45..5f1f4489e74e 100644 --- a/telephony/java/android/telephony/CellIdentityLte.java +++ b/telephony/java/android/telephony/CellIdentityLte.java @@ -40,6 +40,8 @@ public final class CellIdentityLte extends CellIdentity { private final String mAlphaLong; // short alpha Operator Name String or Enhanced Operator Name String private final String mAlphaShort; + // cell bandwidth, in kHz + private final int mBandwidth; /** * @hide @@ -50,6 +52,7 @@ public final class CellIdentityLte extends CellIdentity { mPci = Integer.MAX_VALUE; mTac = Integer.MAX_VALUE; mEarfcn = Integer.MAX_VALUE; + mBandwidth = Integer.MAX_VALUE; mAlphaLong = null; mAlphaShort = null; } @@ -65,7 +68,8 @@ public final class CellIdentityLte extends CellIdentity { * @hide */ public CellIdentityLte(int mcc, int mnc, int ci, int pci, int tac) { - this(ci, pci, tac, Integer.MAX_VALUE, String.valueOf(mcc), String.valueOf(mnc), null, null); + this(ci, pci, tac, Integer.MAX_VALUE, Integer.MAX_VALUE, String.valueOf(mcc), + String.valueOf(mnc), null, null); } /** @@ -80,7 +84,8 @@ public final class CellIdentityLte extends CellIdentity { * @hide */ public CellIdentityLte(int mcc, int mnc, int ci, int pci, int tac, int earfcn) { - this(ci, pci, tac, earfcn, String.valueOf(mcc), String.valueOf(mnc), null, null); + this(ci, pci, tac, earfcn, Integer.MAX_VALUE, String.valueOf(mcc), String.valueOf(mnc), + null, null); } /** @@ -89,6 +94,7 @@ public final class CellIdentityLte extends CellIdentity { * @param pci Physical Cell Id 0..503 * @param tac 16-bit Tracking Area Code * @param earfcn 18-bit LTE Absolute RF Channel Number + * @param bandwidth cell bandwidth in kHz * @param mccStr 3-digit Mobile Country Code in string format * @param mncStr 2 or 3-digit Mobile Network Code in string format * @param alphal long alpha Operator Name String or Enhanced Operator Name String @@ -96,19 +102,20 @@ public final class CellIdentityLte extends CellIdentity { * * @hide */ - public CellIdentityLte(int ci, int pci, int tac, int earfcn, String mccStr, - String mncStr, String alphal, String alphas) { + public CellIdentityLte(int ci, int pci, int tac, int earfcn, int bandwidth, String mccStr, + String mncStr, String alphal, String alphas) { super(TAG, TYPE_LTE, mccStr, mncStr); mCi = ci; mPci = pci; mTac = tac; mEarfcn = earfcn; + mBandwidth = bandwidth; mAlphaLong = alphal; mAlphaShort = alphas; } private CellIdentityLte(CellIdentityLte cid) { - this(cid.mCi, cid.mPci, cid.mTac, cid.mEarfcn, cid.mMccStr, + this(cid.mCi, cid.mPci, cid.mTac, cid.mEarfcn, cid.mBandwidth, cid.mMccStr, cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort); } @@ -163,6 +170,13 @@ public final class CellIdentityLte extends CellIdentity { } /** + * @return Cell bandwidth in kHz, Integer.MAX_VALUE if unknown + */ + public int getBandwidth() { + return mBandwidth; + } + + /** * @return Mobile Country Code in string format, null if unknown */ public String getMccStr() { @@ -219,6 +233,7 @@ public final class CellIdentityLte extends CellIdentity { && mPci == o.mPci && mTac == o.mTac && mEarfcn == o.mEarfcn + && mBandwidth == o.mBandwidth && TextUtils.equals(mMccStr, o.mMccStr) && TextUtils.equals(mMncStr, o.mMncStr) && TextUtils.equals(mAlphaLong, o.mAlphaLong) @@ -232,6 +247,7 @@ public final class CellIdentityLte extends CellIdentity { .append(" mPci=").append(mPci) .append(" mTac=").append(mTac) .append(" mEarfcn=").append(mEarfcn) + .append(" mBandwidth=").append(mBandwidth) .append(" mMcc=").append(mMccStr) .append(" mMnc=").append(mMncStr) .append(" mAlphaLong=").append(mAlphaLong) @@ -248,6 +264,7 @@ public final class CellIdentityLte extends CellIdentity { dest.writeInt(mPci); dest.writeInt(mTac); dest.writeInt(mEarfcn); + dest.writeInt(mBandwidth); dest.writeString(mAlphaLong); dest.writeString(mAlphaShort); } @@ -259,6 +276,7 @@ public final class CellIdentityLte extends CellIdentity { mPci = in.readInt(); mTac = in.readInt(); mEarfcn = in.readInt(); + mBandwidth = in.readInt(); mAlphaLong = in.readString(); mAlphaShort = in.readString(); diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java index b5e4eef8e67a..9232ed7167cc 100644 --- a/telephony/java/android/telephony/CellInfo.java +++ b/telephony/java/android/telephony/CellInfo.java @@ -16,8 +16,11 @@ package android.telephony; +import android.annotation.IntDef; import android.os.Parcel; import android.os.Parcelable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; /** * Immutable cell information from a point in time. @@ -47,6 +50,34 @@ public abstract class CellInfo implements Parcelable { /** @hide */ public static final int TIMESTAMP_TYPE_JAVA_RIL = 4; + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + CONNECTION_NONE, + CONNECTION_PRIMARY_SERVING, + CONNECTION_SECONDARY_SERVING, + CONNECTION_UNKNOWN + }) + public @interface CellConnectionStatus {} + + /** + * Cell is not a serving cell. + * + *

The cell has been measured but is neither a camped nor serving cell (3GPP 36.304). + */ + public static final int CONNECTION_NONE = 0; + + /** UE is connected to cell for signalling and possibly data (3GPP 36.331, 25.331). */ + public static final int CONNECTION_PRIMARY_SERVING = 1; + + /** UE is connected to cell for data (3GPP 36.331, 25.331). */ + public static final int CONNECTION_SECONDARY_SERVING = 2; + + /** Connection status is unknown. */ + public static final int CONNECTION_UNKNOWN = Integer.MAX_VALUE; + + private int mCellConnectionStatus = CONNECTION_NONE; + // True if device is mRegistered to the mobile network private boolean mRegistered; @@ -69,6 +100,7 @@ public abstract class CellInfo implements Parcelable { this.mRegistered = ci.mRegistered; this.mTimeStampType = ci.mTimeStampType; this.mTimeStamp = ci.mTimeStamp; + this.mCellConnectionStatus = ci.mCellConnectionStatus; } /** True if this cell is registered to the mobile network */ @@ -90,6 +122,25 @@ public abstract class CellInfo implements Parcelable { } /** + * Gets the connection status of this cell. + * + * @see #CONNECTION_NONE + * @see #CONNECTION_PRIMARY_SERVING + * @see #CONNECTION_SECONDARY_SERVING + * @see #CONNECTION_UNKNOWN + * + * @return The connection status of the cell. + */ + @CellConnectionStatus + public int getCellConnectionStatus() { + return mCellConnectionStatus; + } + /** @hide */ + public void setCellConnectionStatus(@CellConnectionStatus int cellConnectionStatus) { + mCellConnectionStatus = cellConnectionStatus; + } + + /** * Where time stamp gets recorded. * @return one of TIMESTAMP_TYPE_XXXX * @@ -111,7 +162,7 @@ public abstract class CellInfo implements Parcelable { public int hashCode() { int primeNum = 31; return ((mRegistered ? 0 : 1) * primeNum) + ((int)(mTimeStamp / 1000) * primeNum) - + (mTimeStampType * primeNum); + + (mTimeStampType * primeNum) + (mCellConnectionStatus * primeNum); } @Override @@ -125,7 +176,9 @@ public abstract class CellInfo implements Parcelable { try { CellInfo o = (CellInfo) other; return mRegistered == o.mRegistered - && mTimeStamp == o.mTimeStamp && mTimeStampType == o.mTimeStampType; + && mTimeStamp == o.mTimeStamp + && mTimeStampType == o.mTimeStampType + && mCellConnectionStatus == o.mCellConnectionStatus; } catch (ClassCastException e) { return false; } @@ -155,6 +208,7 @@ public abstract class CellInfo implements Parcelable { timeStampType = timeStampTypeToString(mTimeStampType); sb.append(" mTimeStampType=").append(timeStampType); sb.append(" mTimeStamp=").append(mTimeStamp).append("ns"); + sb.append(" mCellConnectionStatus=").append(mCellConnectionStatus); return sb.toString(); } @@ -181,6 +235,7 @@ public abstract class CellInfo implements Parcelable { dest.writeInt(mRegistered ? 1 : 0); dest.writeInt(mTimeStampType); dest.writeLong(mTimeStamp); + dest.writeInt(mCellConnectionStatus); } /** @@ -192,6 +247,7 @@ public abstract class CellInfo implements Parcelable { mRegistered = (in.readInt() == 1) ? true : false; mTimeStampType = in.readInt(); mTimeStamp = in.readLong(); + mCellConnectionStatus = in.readInt(); } /** Implement the Parcelable interface */ -- 2.11.0