Allow requestNetworkScan to return sanitized info

am: c9d7430685

Change-Id: I91b315cd48095345f34755cc13d059158982a960
This commit is contained in:
Hall Liu
2019-04-01 13:47:42 -07:00
committed by android-build-merger
16 changed files with 141 additions and 3 deletions

View File

@@ -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.
*

View File

@@ -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.

View File

@@ -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.

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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.
*

View File

@@ -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;

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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);
}