diff options
6 files changed, 80 insertions, 1 deletions
diff --git a/telephony/java/android/telephony/CellIdentity.java b/telephony/java/android/telephony/CellIdentity.java index c240dbb684e6..76a002681710 100644 --- a/telephony/java/android/telephony/CellIdentity.java +++ b/telephony/java/android/telephony/CellIdentity.java @@ -129,6 +129,12 @@ public abstract class CellIdentity implements Parcelable { return mAlphaShort; } + /** + * @return a CellLocation object for this CellIdentity + * @hide + */ + public abstract CellLocation asCellLocation(); + @Override public boolean equals(Object other) { if (!(other instanceof CellIdentity)) { diff --git a/telephony/java/android/telephony/CellIdentityCdma.java b/telephony/java/android/telephony/CellIdentityCdma.java index 28090666ea68..9cee2881d697 100644 --- a/telephony/java/android/telephony/CellIdentityCdma.java +++ b/telephony/java/android/telephony/CellIdentityCdma.java @@ -18,7 +18,7 @@ package android.telephony; import android.annotation.Nullable; import android.os.Parcel; -import android.text.TextUtils; +import android.telephony.cdma.CdmaCellLocation; import java.util.Objects; @@ -176,6 +176,18 @@ public final class CellIdentityCdma extends CellIdentity { super.hashCode()); } + /** @hide */ + @Override + public CdmaCellLocation asCellLocation() { + CdmaCellLocation cl = new CdmaCellLocation(); + int bsid = mBasestationId != Integer.MAX_VALUE ? mBasestationId : -1; + int sid = mSystemId != Integer.MAX_VALUE ? mSystemId : -1; + int nid = mNetworkId != Integer.MAX_VALUE ? mNetworkId : -1; + // lat and long already use Integer.MAX_VALUE for invalid/unknown + cl.setCellLocationData(bsid, mLatitude, mLongitude, sid, nid); + return cl; + } + @Override public boolean equals(Object other) { if (this == other) { diff --git a/telephony/java/android/telephony/CellIdentityGsm.java b/telephony/java/android/telephony/CellIdentityGsm.java index 4031254ab071..d99068671530 100644 --- a/telephony/java/android/telephony/CellIdentityGsm.java +++ b/telephony/java/android/telephony/CellIdentityGsm.java @@ -18,6 +18,7 @@ package android.telephony; import android.annotation.Nullable; import android.os.Parcel; +import android.telephony.gsm.GsmCellLocation; import android.text.TextUtils; import java.util.Objects; @@ -194,6 +195,17 @@ public final class CellIdentityGsm extends CellIdentity { return Integer.MAX_VALUE; } + /** @hide */ + @Override + public GsmCellLocation asCellLocation() { + GsmCellLocation cl = new GsmCellLocation(); + int lac = mLac != Integer.MAX_VALUE ? mLac : -1; + int cid = mCid != Integer.MAX_VALUE ? mCid : -1; + cl.setLacAndCid(lac, cid); + cl.setPsc(-1); + return cl; + } + @Override public int hashCode() { return Objects.hash(mLac, mCid, super.hashCode()); diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java index 52573727e1c6..3e632560ce4a 100644 --- a/telephony/java/android/telephony/CellIdentityLte.java +++ b/telephony/java/android/telephony/CellIdentityLte.java @@ -18,6 +18,7 @@ package android.telephony; import android.annotation.Nullable; import android.os.Parcel; +import android.telephony.gsm.GsmCellLocation; import android.text.TextUtils; import java.util.Objects; @@ -196,6 +197,28 @@ public final class CellIdentityLte extends CellIdentity { return mEarfcn; } + /** + * A hack to allow tunneling of LTE information via GsmCellLocation + * so that older Network Location Providers can return some information + * on LTE only networks, see bug 9228974. + * + * The tunnel'd LTE information is returned as follows: + * LAC = TAC field + * CID = CI field + * PSC = 0. + * + * @hide + */ + @Override + public GsmCellLocation asCellLocation() { + GsmCellLocation cl = new GsmCellLocation(); + int tac = mTac != Integer.MAX_VALUE ? mTac : -1; + int cid = mCi != Integer.MAX_VALUE ? mCi : -1; + cl.setLacAndCid(tac, cid); + cl.setPsc(0); + return cl; + } + @Override public int hashCode() { return Objects.hash(mCi, mPci, mTac, super.hashCode()); diff --git a/telephony/java/android/telephony/CellIdentityTdscdma.java b/telephony/java/android/telephony/CellIdentityTdscdma.java index 21b9601bcad9..5a9e474806a3 100644 --- a/telephony/java/android/telephony/CellIdentityTdscdma.java +++ b/telephony/java/android/telephony/CellIdentityTdscdma.java @@ -17,6 +17,7 @@ package android.telephony; import android.os.Parcel; +import android.telephony.gsm.GsmCellLocation; import java.util.Objects; @@ -134,6 +135,17 @@ public final class CellIdentityTdscdma extends CellIdentity { return mUarfcn; } + /** @hide */ + @Override + public GsmCellLocation asCellLocation() { + GsmCellLocation cl = new GsmCellLocation(); + int lac = mLac != Integer.MAX_VALUE ? mLac : -1; + int cid = mCid != Integer.MAX_VALUE ? mCid : -1; + cl.setLacAndCid(lac, cid); + cl.setPsc(-1); // There is no PSC for TD-SCDMA; not using this for CPI to stem shenanigans + return cl; + } + @Override public boolean equals(Object other) { if (this == other) { diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java index a4ac8e30d02e..6ff81ed9f42f 100644 --- a/telephony/java/android/telephony/CellIdentityWcdma.java +++ b/telephony/java/android/telephony/CellIdentityWcdma.java @@ -18,6 +18,7 @@ package android.telephony; import android.annotation.Nullable; import android.os.Parcel; +import android.telephony.gsm.GsmCellLocation; import android.text.TextUtils; import java.util.Objects; @@ -189,6 +190,19 @@ public final class CellIdentityWcdma extends CellIdentity { return mUarfcn; } + /** @hide */ + @Override + public GsmCellLocation asCellLocation() { + GsmCellLocation cl = new GsmCellLocation(); + int lac = mLac != Integer.MAX_VALUE ? mLac : -1; + int cid = mCid != Integer.MAX_VALUE ? mCid : -1; + int psc = mPsc != Integer.MAX_VALUE ? mPsc : -1; + cl.setLacAndCid(lac, cid); + cl.setPsc(psc); + + return cl; + } + @Override public boolean equals(Object other) { if (this == other) { |