Add Class-Filtered getCellSignalStrengths

Add a version of getCellSignalStrengths that allows
the caller to pass in a particular class version of
interest, which returns only valid matching signal
strengths of that type. A caller may now do:

for(CellSignalStrengthLte lte : ss.getCellSignalStrengths(
        CellSignalStrengthLte.class)) {
    return lte.getRssnr();
}

Bug: 123939399
Test: (cts) atest SignalStrengthTest
Change-Id: Ia64d25df4e782f76e6474b92ca7cd60c2f7d2f5e
This commit is contained in:
Nathan Harold
2019-02-12 13:25:47 -08:00
parent da59b53907
commit 7e992ec284
2 changed files with 47 additions and 7 deletions

View File

@@ -42760,6 +42760,7 @@ package android.telephony {
method @Deprecated public int getCdmaDbm();
method @Deprecated public int getCdmaEcio();
method @NonNull public java.util.List<android.telephony.CellSignalStrength> getCellSignalStrengths();
method public <T extends android.telephony.CellSignalStrength> java.util.List<T> getCellSignalStrengths(@NonNull Class<T>);
method @Deprecated public int getEvdoDbm();
method @Deprecated public int getEvdoEcio();
method @Deprecated public int getEvdoSnr();

View File

@@ -215,13 +215,52 @@ public class SignalStrength implements Parcelable {
* @see android.telephony#CellSignalStrengthGsm
*/
public @NonNull List<CellSignalStrength> getCellSignalStrengths() {
List<CellSignalStrength> cssList = new ArrayList<>(2); // Usually have 2 or fewer elems
if (mLte.isValid()) cssList.add(mLte);
if (mCdma.isValid()) cssList.add(mCdma);
if (mTdscdma.isValid()) cssList.add(mTdscdma);
if (mWcdma.isValid()) cssList.add(mWcdma);
if (mGsm.isValid()) cssList.add(mGsm);
if (mNr.isValid()) cssList.add(mNr);
return getCellSignalStrengths(CellSignalStrength.class);
}
/**
* Returns a List of CellSignalStrength Components of this SignalStrength Report.
*
* Use this API to access underlying
* {@link android.telephony#CellSignalStrength CellSignalStrength} objects that provide more
* granular information about the SignalStrength report. Only valid (non-empty)
* CellSignalStrengths will be returned. The order of any returned elements is not guaranteed,
* and the list may contain more than one instance of a CellSignalStrength type.
*
* @param clazz a class type that extends
* {@link android.telephony.CellSignalStrength CellSignalStrength} to filter possible
* return values.
* @return a List of CellSignalStrength or an empty List if there are no valid measurements.
*
* @see android.telephony#CellSignalStrength
* @see android.telephony#CellSignalStrengthNr
* @see android.telephony#CellSignalStrengthLte
* @see android.telephony#CellSignalStrengthTdscdma
* @see android.telephony#CellSignalStrengthWcdma
* @see android.telephony#CellSignalStrengthCdma
* @see android.telephony#CellSignalStrengthGsm
*/
public <T extends CellSignalStrength> @NonNull List<T> getCellSignalStrengths(
@NonNull Class<T> clazz) {
List<T> cssList = new ArrayList<>(2); // Usually have 2 or fewer elems
if (mLte.isValid() && clazz.isAssignableFrom(CellSignalStrengthLte.class)) {
cssList.add((T) mLte);
}
if (mCdma.isValid() && clazz.isAssignableFrom(CellSignalStrengthCdma.class)) {
cssList.add((T) mCdma);
}
if (mTdscdma.isValid() && clazz.isAssignableFrom(CellSignalStrengthTdscdma.class)) {
cssList.add((T) mTdscdma);
}
if (mWcdma.isValid() && clazz.isAssignableFrom(CellSignalStrengthWcdma.class)) {
cssList.add((T) mWcdma);
}
if (mGsm.isValid() && clazz.isAssignableFrom(CellSignalStrengthGsm.class)) {
cssList.add((T) mGsm);
}
if (mNr.isValid() && clazz.isAssignableFrom(CellSignalStrengthNr.class)) {
cssList.add((T) mNr);
}
return cssList;
}