Allow requestNetworkScan to return sanitized info
am: c9d7430685
Change-Id: I91b315cd48095345f34755cc13d059158982a960
This commit is contained in:
@@ -109,6 +109,22 @@ public abstract class CellIdentity implements Parcelable {
|
||||
return mType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MCC or null for CDMA
|
||||
* @hide
|
||||
*/
|
||||
public String getMccString() {
|
||||
return mMccStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return MNC or null for CDMA
|
||||
* @hide
|
||||
*/
|
||||
public String getMncString() {
|
||||
return mMncStr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the channel number of the cell identity.
|
||||
*
|
||||
|
||||
@@ -109,6 +109,13 @@ public final class CellIdentityCdma extends CellIdentity {
|
||||
return new CellIdentityCdma(this);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public CellIdentityCdma sanitizeLocationInfo() {
|
||||
return new CellIdentityCdma(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
mAlphaLong, mAlphaShort);
|
||||
}
|
||||
|
||||
/**
|
||||
* Take the latitude and longitude in 1/4 seconds and see if
|
||||
* the reported location is on Null Island.
|
||||
|
||||
@@ -97,6 +97,12 @@ public final class CellIdentityGsm extends CellIdentity {
|
||||
return new CellIdentityGsm(this);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public CellIdentityGsm sanitizeLocationInfo() {
|
||||
return new CellIdentityGsm(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
CellInfo.UNAVAILABLE, mMccStr, mMncStr, mAlphaLong, mAlphaShort);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 3-digit Mobile Country Code, 0..999,
|
||||
* {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
|
||||
|
||||
@@ -113,6 +113,13 @@ public final class CellIdentityLte extends CellIdentity {
|
||||
cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public CellIdentityLte sanitizeLocationInfo() {
|
||||
return new CellIdentityLte(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
mMccStr, mMncStr, mAlphaLong, mAlphaShort);
|
||||
}
|
||||
|
||||
CellIdentityLte copy() {
|
||||
return new CellIdentityLte(this);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public final class CellIdentityNr extends CellIdentity {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public CellIdentityNr(int pci, int tac, int nrArfcn, String mccStr, String mncStr,
|
||||
public CellIdentityNr(int pci, int tac, int nrArfcn, String mccStr, String mncStr,
|
||||
long nci, String alphal, String alphas) {
|
||||
super(TAG, CellInfo.TYPE_NR, mccStr, mncStr, alphal, alphas);
|
||||
mPci = pci;
|
||||
@@ -55,6 +55,12 @@ public final class CellIdentityNr extends CellIdentity {
|
||||
mNci = nci;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public CellIdentityNr sanitizeLocationInfo() {
|
||||
return new CellIdentityNr(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
mMccStr, mMncStr, CellInfo.UNAVAILABLE, mAlphaLong, mAlphaShort);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return a CellLocation object for this CellIdentity.
|
||||
* @hide
|
||||
|
||||
@@ -90,6 +90,12 @@ public final class CellIdentityTdscdma extends CellIdentity {
|
||||
cid.uarfcn, cid.operatorNames.alphaLong, cid.operatorNames.alphaShort);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public CellIdentityTdscdma sanitizeLocationInfo() {
|
||||
return new CellIdentityTdscdma(mMccStr, mMncStr, CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, mAlphaLong, mAlphaShort);
|
||||
}
|
||||
|
||||
CellIdentityTdscdma copy() {
|
||||
return new CellIdentityTdscdma(this);
|
||||
}
|
||||
|
||||
@@ -91,6 +91,13 @@ public final class CellIdentityWcdma extends CellIdentity {
|
||||
cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public CellIdentityWcdma sanitizeLocationInfo() {
|
||||
return new CellIdentityWcdma(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
|
||||
CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, mMccStr, mMncStr,
|
||||
mAlphaLong, mAlphaShort);
|
||||
}
|
||||
|
||||
CellIdentityWcdma copy() {
|
||||
return new CellIdentityWcdma(this);
|
||||
}
|
||||
|
||||
@@ -197,6 +197,11 @@ public abstract class CellInfo implements Parcelable {
|
||||
@NonNull
|
||||
public abstract CellSignalStrength getCellSignalStrength();
|
||||
|
||||
/** @hide */
|
||||
public CellInfo sanitizeLocationInfo() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the connection status of this cell.
|
||||
*
|
||||
|
||||
@@ -90,6 +90,15 @@ public final class CellInfoCdma extends CellInfo implements Parcelable {
|
||||
public CellSignalStrengthCdma getCellSignalStrength() {
|
||||
return mCellSignalStrengthCdma;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public CellInfo sanitizeLocationInfo() {
|
||||
CellInfoCdma result = new CellInfoCdma(this);
|
||||
result.mCellIdentityCdma = mCellIdentityCdma.sanitizeLocationInfo();
|
||||
return result;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public void setCellSignalStrength(CellSignalStrengthCdma css) {
|
||||
mCellSignalStrengthCdma = css;
|
||||
|
||||
@@ -84,6 +84,15 @@ public final class CellInfoGsm extends CellInfo implements Parcelable {
|
||||
public CellSignalStrengthGsm getCellSignalStrength() {
|
||||
return mCellSignalStrengthGsm;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public CellInfo sanitizeLocationInfo() {
|
||||
CellInfoGsm result = new CellInfoGsm(this);
|
||||
result.mCellIdentityGsm = mCellIdentityGsm.sanitizeLocationInfo();
|
||||
return result;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public void setCellSignalStrength(CellSignalStrengthGsm css) {
|
||||
mCellSignalStrengthGsm = css;
|
||||
|
||||
@@ -96,6 +96,15 @@ public final class CellInfoLte extends CellInfo implements Parcelable {
|
||||
if (DBG) log("getCellSignalStrength: " + mCellSignalStrengthLte);
|
||||
return mCellSignalStrengthLte;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public CellInfo sanitizeLocationInfo() {
|
||||
CellInfoLte result = new CellInfoLte(this);
|
||||
result.mCellIdentityLte = mCellIdentityLte.sanitizeLocationInfo();
|
||||
return result;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
|
||||
public void setCellSignalStrength(CellSignalStrengthLte css) {
|
||||
|
||||
@@ -36,6 +36,13 @@ public final class CellInfoNr extends CellInfo {
|
||||
mCellSignalStrength = CellSignalStrengthNr.CREATOR.createFromParcel(in);
|
||||
}
|
||||
|
||||
private CellInfoNr(CellInfoNr other, boolean sanitizeLocationInfo) {
|
||||
super(other);
|
||||
mCellIdentity = sanitizeLocationInfo ? other.mCellIdentity.sanitizeLocationInfo()
|
||||
: other.mCellIdentity;
|
||||
mCellSignalStrength = other.mCellSignalStrength;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
public CellIdentity getCellIdentity() {
|
||||
@@ -48,6 +55,12 @@ public final class CellInfoNr extends CellInfo {
|
||||
return mCellSignalStrength;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public CellInfo sanitizeLocationInfo() {
|
||||
return new CellInfoNr(this, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(super.hashCode(), mCellIdentity, mCellSignalStrength);
|
||||
|
||||
@@ -90,6 +90,14 @@ public final class CellInfoTdscdma extends CellInfo implements Parcelable {
|
||||
return mCellSignalStrengthTdscdma;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public CellInfo sanitizeLocationInfo() {
|
||||
CellInfoTdscdma result = new CellInfoTdscdma(this);
|
||||
result.mCellIdentityTdscdma = mCellIdentityTdscdma.sanitizeLocationInfo();
|
||||
return result;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public void setCellSignalStrength(CellSignalStrengthTdscdma css) {
|
||||
mCellSignalStrengthTdscdma = css;
|
||||
|
||||
@@ -84,6 +84,15 @@ public final class CellInfoWcdma extends CellInfo implements Parcelable {
|
||||
public CellSignalStrengthWcdma getCellSignalStrength() {
|
||||
return mCellSignalStrengthWcdma;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Override
|
||||
public CellInfo sanitizeLocationInfo() {
|
||||
CellInfoWcdma result = new CellInfoWcdma(this);
|
||||
result.mCellIdentityWcdma = mCellIdentityWcdma.sanitizeLocationInfo();
|
||||
return result;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public void setCellSignalStrength(CellSignalStrengthWcdma css) {
|
||||
mCellSignalStrengthWcdma = css;
|
||||
|
||||
@@ -6864,6 +6864,17 @@ public class TelephonyManager {
|
||||
* app has carrier privileges (see {@link #hasCarrierPrivileges})
|
||||
* and {@link android.Manifest.permission#ACCESS_FINE_LOCATION}.
|
||||
*
|
||||
* If the system-wide location switch is off, apps may still call this API, with the
|
||||
* following constraints:
|
||||
* <ol>
|
||||
* <li>The app must hold the {@code android.permission.NETWORK_SCAN} permission.</li>
|
||||
* <li>The app must not supply any specific bands or channels to scan.</li>
|
||||
* <li>The app must only specify MCC/MNC pairs that are
|
||||
* associated to a SIM in the device.</li>
|
||||
* <li>Returned results will have no meaningful info other than signal strength
|
||||
* and MCC/MNC info.</li>
|
||||
* </ol>
|
||||
*
|
||||
* @param request Contains all the RAT with bands/channels that need to be scanned.
|
||||
* @param executor The executor through which the callback should be invoked. Since the scan
|
||||
* request may trigger multiple callbacks and they must be invoked in the same order as
|
||||
|
||||
@@ -53,6 +53,11 @@ public final class TelephonyScanManager {
|
||||
public static final int CALLBACK_SCAN_ERROR = 2;
|
||||
/** @hide */
|
||||
public static final int CALLBACK_SCAN_COMPLETE = 3;
|
||||
/** @hide */
|
||||
public static final int CALLBACK_RESTRICTED_SCAN_RESULTS = 4;
|
||||
|
||||
/** @hide */
|
||||
public static final int INVALID_SCAN_ID = -1;
|
||||
|
||||
/**
|
||||
* The caller of
|
||||
@@ -129,6 +134,7 @@ public final class TelephonyScanManager {
|
||||
}
|
||||
|
||||
switch (message.what) {
|
||||
case CALLBACK_RESTRICTED_SCAN_RESULTS:
|
||||
case CALLBACK_SCAN_RESULTS:
|
||||
try {
|
||||
final Bundle b = message.getData();
|
||||
@@ -137,9 +143,9 @@ public final class TelephonyScanManager {
|
||||
for (int i = 0; i < parcelables.length; i++) {
|
||||
ci[i] = (CellInfo) parcelables[i];
|
||||
}
|
||||
executor.execute(() ->{
|
||||
executor.execute(() -> {
|
||||
Rlog.d(TAG, "onResults: " + ci.toString());
|
||||
callback.onResults((List<CellInfo>) Arrays.asList(ci));
|
||||
callback.onResults(Arrays.asList(ci));
|
||||
});
|
||||
} catch (Exception e) {
|
||||
Rlog.e(TAG, "Exception in networkscan callback onResults", e);
|
||||
@@ -200,6 +206,10 @@ public final class TelephonyScanManager {
|
||||
if (telephony != null) {
|
||||
int scanId = telephony.requestNetworkScan(
|
||||
subId, request, mMessenger, new Binder(), callingPackage);
|
||||
if (scanId == INVALID_SCAN_ID) {
|
||||
Rlog.e(TAG, "Failed to initiate network scan");
|
||||
return null;
|
||||
}
|
||||
saveScanInfo(scanId, request, executor, callback);
|
||||
return new NetworkScan(scanId, subId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user