From 7e992ec284cc7b138ac9d2929de17173b3b43dc7 Mon Sep 17 00:00:00 2001 From: Nathan Harold Date: Tue, 12 Feb 2019 13:25:47 -0800 Subject: [PATCH] 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 --- api/current.txt | 1 + .../android/telephony/SignalStrength.java | 53 ++++++++++++++++--- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/api/current.txt b/api/current.txt index 95350955f163b..d311e41f3e124 100755 --- a/api/current.txt +++ b/api/current.txt @@ -42760,6 +42760,7 @@ package android.telephony { method @Deprecated public int getCdmaDbm(); method @Deprecated public int getCdmaEcio(); method @NonNull public java.util.List getCellSignalStrengths(); + method public java.util.List getCellSignalStrengths(@NonNull Class); method @Deprecated public int getEvdoDbm(); method @Deprecated public int getEvdoEcio(); method @Deprecated public int getEvdoSnr(); diff --git a/telephony/java/android/telephony/SignalStrength.java b/telephony/java/android/telephony/SignalStrength.java index d2ae106b55456..d461bd0fee8a2 100644 --- a/telephony/java/android/telephony/SignalStrength.java +++ b/telephony/java/android/telephony/SignalStrength.java @@ -215,13 +215,52 @@ public class SignalStrength implements Parcelable { * @see android.telephony#CellSignalStrengthGsm */ public @NonNull List getCellSignalStrengths() { - List 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 @NonNull List getCellSignalStrengths( + @NonNull Class clazz) { + List 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; }