summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--telephony/java/android/telephony/CellIdentity.java6
-rw-r--r--telephony/java/android/telephony/CellIdentityCdma.java14
-rw-r--r--telephony/java/android/telephony/CellIdentityGsm.java12
-rw-r--r--telephony/java/android/telephony/CellIdentityLte.java23
-rw-r--r--telephony/java/android/telephony/CellIdentityTdscdma.java12
-rw-r--r--telephony/java/android/telephony/CellIdentityWcdma.java14
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) {