1 package org.robolectric.shadows; 2 3 import android.net.wifi.WifiUsabilityStatsEntry; 4 import android.net.wifi.WifiUsabilityStatsEntry.ContentionTimeStats; 5 import android.net.wifi.WifiUsabilityStatsEntry.RadioStats; 6 import android.net.wifi.WifiUsabilityStatsEntry.RateStats; 7 import android.os.Build.VERSION_CODES; 8 import android.util.SparseArray; 9 import org.robolectric.RuntimeEnvironment; 10 import org.robolectric.util.ReflectionHelpers; 11 import org.robolectric.util.ReflectionHelpers.ClassParameter; 12 13 /** Builder for {@link WifiUsabilityStatsEntry}. */ 14 public class WifiUsabilityStatsEntryBuilder { 15 private long timeStampMillis; 16 private int rssi; 17 private int linkSpeedMbps; 18 private long totalTxSuccess; 19 private long totalTxRetries; 20 private long totalTxBad; 21 private long totalRxSuccess; 22 private long totalRadioOnTimeMillis; 23 private long totalRadioTxTimeMillis; 24 private long totalRadioRxTimeMillis; 25 private long totalScanTimeMillis; 26 private long totalNanScanTimeMillis; 27 private long totalBackgroundScanTimeMillis; 28 private long totalRoamScanTimeMillis; 29 private long totalPnoScanTimeMillis; 30 private long totalHotspot2ScanTimeMillis; 31 private long totalCcaBusyFreqTimeMillis; 32 private long totalRadioOnFreqTimeMillis; 33 private long totalBeaconRx; 34 private int probeStatusSinceLastUpdate; 35 private int probeElapsedTimeSinceLastUpdateMillis; 36 private int probeMcsRateSinceLastUpdate; 37 private int rxLinkSpeedMbps; 38 private int timeSliceDutyCycleInPercent; 39 private static final int CHANNEL_UTILIZATION_RATIO = 0; 40 private boolean isThroughputSufficient = true; 41 private boolean isWifiScoringEnabled = true; 42 private boolean isCellularDataAvailable = true; 43 private int cellularDataNetworkType; 44 private int cellularSignalStrengthDbm; 45 private int cellularSignalStrengthDb; 46 private boolean isSameRegisteredCell; 47 build()48 public WifiUsabilityStatsEntry build() { 49 if (RuntimeEnvironment.getApiLevel() <= VERSION_CODES.R) { 50 return ReflectionHelpers.callConstructor( 51 WifiUsabilityStatsEntry.class, 52 ClassParameter.from(long.class, timeStampMillis), 53 ClassParameter.from(int.class, rssi), 54 ClassParameter.from(int.class, linkSpeedMbps), 55 ClassParameter.from(long.class, totalTxSuccess), 56 ClassParameter.from(long.class, totalTxRetries), 57 ClassParameter.from(long.class, totalTxBad), 58 ClassParameter.from(long.class, totalRxSuccess), 59 ClassParameter.from(long.class, totalRadioOnTimeMillis), 60 ClassParameter.from(long.class, totalRadioTxTimeMillis), 61 ClassParameter.from(long.class, totalRadioRxTimeMillis), 62 ClassParameter.from(long.class, totalScanTimeMillis), 63 ClassParameter.from(long.class, totalNanScanTimeMillis), 64 ClassParameter.from(long.class, totalBackgroundScanTimeMillis), 65 ClassParameter.from(long.class, totalRoamScanTimeMillis), 66 ClassParameter.from(long.class, totalPnoScanTimeMillis), 67 ClassParameter.from(long.class, totalHotspot2ScanTimeMillis), 68 ClassParameter.from(long.class, totalCcaBusyFreqTimeMillis), 69 ClassParameter.from(long.class, totalRadioOnFreqTimeMillis), 70 ClassParameter.from(long.class, totalBeaconRx), 71 ClassParameter.from(int.class, probeStatusSinceLastUpdate), 72 ClassParameter.from(int.class, probeElapsedTimeSinceLastUpdateMillis), 73 ClassParameter.from(int.class, probeMcsRateSinceLastUpdate), 74 ClassParameter.from(int.class, rxLinkSpeedMbps), 75 ClassParameter.from(int.class, cellularDataNetworkType), 76 ClassParameter.from(int.class, cellularSignalStrengthDbm), 77 ClassParameter.from(int.class, cellularSignalStrengthDb), 78 ClassParameter.from(boolean.class, isSameRegisteredCell)); 79 } else if (RuntimeEnvironment.getApiLevel() > VERSION_CODES.TIRAMISU) { 80 return ReflectionHelpers.callConstructor( 81 WifiUsabilityStatsEntry.class, 82 ClassParameter.from(long.class, timeStampMillis), 83 ClassParameter.from(int.class, rssi), 84 ClassParameter.from(int.class, linkSpeedMbps), 85 ClassParameter.from(long.class, totalTxSuccess), 86 ClassParameter.from(long.class, totalTxRetries), 87 ClassParameter.from(long.class, totalTxBad), 88 ClassParameter.from(long.class, totalRxSuccess), 89 ClassParameter.from(long.class, totalRadioOnTimeMillis), 90 ClassParameter.from(long.class, totalRadioTxTimeMillis), 91 ClassParameter.from(long.class, totalRadioRxTimeMillis), 92 ClassParameter.from(long.class, totalScanTimeMillis), 93 ClassParameter.from(long.class, totalNanScanTimeMillis), 94 ClassParameter.from(long.class, totalBackgroundScanTimeMillis), 95 ClassParameter.from(long.class, totalRoamScanTimeMillis), 96 ClassParameter.from(long.class, totalPnoScanTimeMillis), 97 ClassParameter.from(long.class, totalHotspot2ScanTimeMillis), 98 ClassParameter.from(long.class, totalCcaBusyFreqTimeMillis), 99 ClassParameter.from(long.class, totalRadioOnFreqTimeMillis), 100 ClassParameter.from(long.class, totalBeaconRx), 101 ClassParameter.from(int.class, probeStatusSinceLastUpdate), 102 ClassParameter.from(int.class, probeElapsedTimeSinceLastUpdateMillis), 103 ClassParameter.from(int.class, probeMcsRateSinceLastUpdate), 104 ClassParameter.from(int.class, rxLinkSpeedMbps), 105 ClassParameter.from(int.class, timeSliceDutyCycleInPercent), // new in T 106 ClassParameter.from( 107 ContentionTimeStats[].class, new ContentionTimeStats[] {}), // new in T 108 ClassParameter.from(RateStats[].class, new RateStats[] {}), // new in T 109 ClassParameter.from(RadioStats[].class, new RadioStats[] {}), // new in T 110 ClassParameter.from(int.class, CHANNEL_UTILIZATION_RATIO), // new in T 111 ClassParameter.from(boolean.class, isThroughputSufficient), // new in T 112 ClassParameter.from(boolean.class, isWifiScoringEnabled), // new in T 113 ClassParameter.from(boolean.class, isCellularDataAvailable), // new in T 114 ClassParameter.from(int.class, cellularDataNetworkType), 115 ClassParameter.from(int.class, cellularSignalStrengthDbm), 116 ClassParameter.from(int.class, cellularSignalStrengthDb), 117 ClassParameter.from(boolean.class, isSameRegisteredCell), 118 ClassParameter.from(SparseArray.class, new SparseArray<>())); // new in >T 119 } else { 120 return ReflectionHelpers.callConstructor( 121 WifiUsabilityStatsEntry.class, 122 ClassParameter.from(long.class, timeStampMillis), 123 ClassParameter.from(int.class, rssi), 124 ClassParameter.from(int.class, linkSpeedMbps), 125 ClassParameter.from(long.class, totalTxSuccess), 126 ClassParameter.from(long.class, totalTxRetries), 127 ClassParameter.from(long.class, totalTxBad), 128 ClassParameter.from(long.class, totalRxSuccess), 129 ClassParameter.from(long.class, totalRadioOnTimeMillis), 130 ClassParameter.from(long.class, totalRadioTxTimeMillis), 131 ClassParameter.from(long.class, totalRadioRxTimeMillis), 132 ClassParameter.from(long.class, totalScanTimeMillis), 133 ClassParameter.from(long.class, totalNanScanTimeMillis), 134 ClassParameter.from(long.class, totalBackgroundScanTimeMillis), 135 ClassParameter.from(long.class, totalRoamScanTimeMillis), 136 ClassParameter.from(long.class, totalPnoScanTimeMillis), 137 ClassParameter.from(long.class, totalHotspot2ScanTimeMillis), 138 ClassParameter.from(long.class, totalCcaBusyFreqTimeMillis), 139 ClassParameter.from(long.class, totalRadioOnFreqTimeMillis), 140 ClassParameter.from(long.class, totalBeaconRx), 141 ClassParameter.from(int.class, probeStatusSinceLastUpdate), 142 ClassParameter.from(int.class, probeElapsedTimeSinceLastUpdateMillis), 143 ClassParameter.from(int.class, probeMcsRateSinceLastUpdate), 144 ClassParameter.from(int.class, rxLinkSpeedMbps), 145 ClassParameter.from(int.class, timeSliceDutyCycleInPercent), // new in T 146 ClassParameter.from( 147 ContentionTimeStats[].class, new ContentionTimeStats[] {}), // new in T 148 ClassParameter.from(RateStats[].class, new RateStats[] {}), // new in T 149 ClassParameter.from(RadioStats[].class, new RadioStats[] {}), // new in T 150 ClassParameter.from(int.class, CHANNEL_UTILIZATION_RATIO), // new in T 151 ClassParameter.from(boolean.class, isThroughputSufficient), // new in T 152 ClassParameter.from(boolean.class, isWifiScoringEnabled), // new in T 153 ClassParameter.from(boolean.class, isCellularDataAvailable), // new in T 154 ClassParameter.from(int.class, cellularDataNetworkType), 155 ClassParameter.from(int.class, cellularSignalStrengthDbm), 156 ClassParameter.from(int.class, cellularSignalStrengthDb), 157 ClassParameter.from(boolean.class, isSameRegisteredCell)); 158 } 159 } 160 setTimeStampMillis(long timeStampMillis)161 public WifiUsabilityStatsEntryBuilder setTimeStampMillis(long timeStampMillis) { 162 this.timeStampMillis = timeStampMillis; 163 return this; 164 } 165 setRssi(int rssi)166 public WifiUsabilityStatsEntryBuilder setRssi(int rssi) { 167 this.rssi = rssi; 168 return this; 169 } 170 setLinkSpeedMbps(int linkSpeedMbps)171 public WifiUsabilityStatsEntryBuilder setLinkSpeedMbps(int linkSpeedMbps) { 172 this.linkSpeedMbps = linkSpeedMbps; 173 return this; 174 } 175 setTotalTxSuccess(long totalTxSuccess)176 public WifiUsabilityStatsEntryBuilder setTotalTxSuccess(long totalTxSuccess) { 177 this.totalTxSuccess = totalTxSuccess; 178 return this; 179 } 180 setTotalTxRetries(long totalTxRetries)181 public WifiUsabilityStatsEntryBuilder setTotalTxRetries(long totalTxRetries) { 182 this.totalTxRetries = totalTxRetries; 183 return this; 184 } 185 setTotalTxBad(long totalTxBad)186 public WifiUsabilityStatsEntryBuilder setTotalTxBad(long totalTxBad) { 187 this.totalTxBad = totalTxBad; 188 return this; 189 } 190 setTotalRxSuccess(long totalRxSuccess)191 public WifiUsabilityStatsEntryBuilder setTotalRxSuccess(long totalRxSuccess) { 192 this.totalRxSuccess = totalRxSuccess; 193 return this; 194 } 195 setTotalRadioOnTimeMillis(long totalRadioOnTimeMillis)196 public WifiUsabilityStatsEntryBuilder setTotalRadioOnTimeMillis(long totalRadioOnTimeMillis) { 197 this.totalRadioOnTimeMillis = totalRadioOnTimeMillis; 198 return this; 199 } 200 setTotalRadioTxTimeMillis(long totalRadioTxTimeMillis)201 public WifiUsabilityStatsEntryBuilder setTotalRadioTxTimeMillis(long totalRadioTxTimeMillis) { 202 this.totalRadioTxTimeMillis = totalRadioTxTimeMillis; 203 return this; 204 } 205 setTotalRadioRxTimeMillis(long totalRadioRxTimeMillis)206 public WifiUsabilityStatsEntryBuilder setTotalRadioRxTimeMillis(long totalRadioRxTimeMillis) { 207 this.totalRadioRxTimeMillis = totalRadioRxTimeMillis; 208 return this; 209 } 210 setTotalScanTimeMillis(long totalScanTimeMillis)211 public WifiUsabilityStatsEntryBuilder setTotalScanTimeMillis(long totalScanTimeMillis) { 212 this.totalScanTimeMillis = totalScanTimeMillis; 213 return this; 214 } 215 setTotalNanScanTimeMillis(long totalNanScanTimeMillis)216 public WifiUsabilityStatsEntryBuilder setTotalNanScanTimeMillis(long totalNanScanTimeMillis) { 217 this.totalNanScanTimeMillis = totalNanScanTimeMillis; 218 return this; 219 } 220 setTotalBackgroundScanTimeMillis( long totalBackgroundScanTimeMillis)221 public WifiUsabilityStatsEntryBuilder setTotalBackgroundScanTimeMillis( 222 long totalBackgroundScanTimeMillis) { 223 this.totalBackgroundScanTimeMillis = totalBackgroundScanTimeMillis; 224 return this; 225 } 226 setTotalRoamScanTimeMillis(long totalRoamScanTimeMillis)227 public WifiUsabilityStatsEntryBuilder setTotalRoamScanTimeMillis(long totalRoamScanTimeMillis) { 228 this.totalRoamScanTimeMillis = totalRoamScanTimeMillis; 229 return this; 230 } 231 setTotalPnoScanTimeMillis(long totalPnoScanTimeMillis)232 public WifiUsabilityStatsEntryBuilder setTotalPnoScanTimeMillis(long totalPnoScanTimeMillis) { 233 this.totalPnoScanTimeMillis = totalPnoScanTimeMillis; 234 return this; 235 } 236 setTotalHotspot2ScanTimeMillis( long totalHotspot2ScanTimeMillis)237 public WifiUsabilityStatsEntryBuilder setTotalHotspot2ScanTimeMillis( 238 long totalHotspot2ScanTimeMillis) { 239 this.totalHotspot2ScanTimeMillis = totalHotspot2ScanTimeMillis; 240 return this; 241 } 242 setTotalCcaBusyFreqTimeMillis( long totalCcaBusyFreqTimeMillis)243 public WifiUsabilityStatsEntryBuilder setTotalCcaBusyFreqTimeMillis( 244 long totalCcaBusyFreqTimeMillis) { 245 this.totalCcaBusyFreqTimeMillis = totalCcaBusyFreqTimeMillis; 246 return this; 247 } 248 setTotalRadioOnFreqTimeMillis( long totalRadioOnFreqTimeMillis)249 public WifiUsabilityStatsEntryBuilder setTotalRadioOnFreqTimeMillis( 250 long totalRadioOnFreqTimeMillis) { 251 this.totalRadioOnFreqTimeMillis = totalRadioOnFreqTimeMillis; 252 return this; 253 } 254 setTotalBeaconRx(long totalBeaconRx)255 public WifiUsabilityStatsEntryBuilder setTotalBeaconRx(long totalBeaconRx) { 256 this.totalBeaconRx = totalBeaconRx; 257 return this; 258 } 259 setProbeStatusSinceLastUpdate( int probeStatusSinceLastUpdate)260 public WifiUsabilityStatsEntryBuilder setProbeStatusSinceLastUpdate( 261 int probeStatusSinceLastUpdate) { 262 this.probeStatusSinceLastUpdate = probeStatusSinceLastUpdate; 263 return this; 264 } 265 setProbeElapsedTimeSinceLastUpdateMillis( int probeElapsedTimeSinceLastUpdateMillis)266 public WifiUsabilityStatsEntryBuilder setProbeElapsedTimeSinceLastUpdateMillis( 267 int probeElapsedTimeSinceLastUpdateMillis) { 268 this.probeElapsedTimeSinceLastUpdateMillis = probeElapsedTimeSinceLastUpdateMillis; 269 return this; 270 } 271 setProbeMcsRateSinceLastUpdate( int probeMcsRateSinceLastUpdate)272 public WifiUsabilityStatsEntryBuilder setProbeMcsRateSinceLastUpdate( 273 int probeMcsRateSinceLastUpdate) { 274 this.probeMcsRateSinceLastUpdate = probeMcsRateSinceLastUpdate; 275 return this; 276 } 277 setRxLinkSpeedMbps(int rxLinkSpeedMbps)278 public WifiUsabilityStatsEntryBuilder setRxLinkSpeedMbps(int rxLinkSpeedMbps) { 279 this.rxLinkSpeedMbps = rxLinkSpeedMbps; 280 return this; 281 } 282 setCellularDataNetworkType(int cellularDataNetworkType)283 public WifiUsabilityStatsEntryBuilder setCellularDataNetworkType(int cellularDataNetworkType) { 284 this.cellularDataNetworkType = cellularDataNetworkType; 285 return this; 286 } 287 setCellularSignalStrengthDbm( int cellularSignalStrengthDbm)288 public WifiUsabilityStatsEntryBuilder setCellularSignalStrengthDbm( 289 int cellularSignalStrengthDbm) { 290 this.cellularSignalStrengthDbm = cellularSignalStrengthDbm; 291 return this; 292 } 293 setCellularSignalStrengthDb(int cellularSignalStrengthDb)294 public WifiUsabilityStatsEntryBuilder setCellularSignalStrengthDb(int cellularSignalStrengthDb) { 295 this.cellularSignalStrengthDb = cellularSignalStrengthDb; 296 return this; 297 } 298 setSameRegisteredCell(boolean sameRegisteredCell)299 public WifiUsabilityStatsEntryBuilder setSameRegisteredCell(boolean sameRegisteredCell) { 300 isSameRegisteredCell = sameRegisteredCell; 301 return this; 302 } 303 setTimeSliceDutyCycleInPercent(int percent)304 public WifiUsabilityStatsEntryBuilder setTimeSliceDutyCycleInPercent(int percent) { 305 this.timeSliceDutyCycleInPercent = percent; 306 return this; 307 } 308 setIsCellularDataAvailable(boolean avail)309 public WifiUsabilityStatsEntryBuilder setIsCellularDataAvailable(boolean avail) { 310 this.isCellularDataAvailable = avail; 311 return this; 312 } 313 setIsThroughputSufficient(boolean sufficient)314 public WifiUsabilityStatsEntryBuilder setIsThroughputSufficient(boolean sufficient) { 315 this.isThroughputSufficient = sufficient; 316 return this; 317 } 318 setIsWifiScoringEnabled(boolean enabled)319 public WifiUsabilityStatsEntryBuilder setIsWifiScoringEnabled(boolean enabled) { 320 this.isWifiScoringEnabled = enabled; 321 return this; 322 } 323 } 324