1 package org.robolectric.shadows; 2 3 import android.net.wifi.WifiScanner; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.os.Looper; 7 import android.os.Messenger; 8 import java.util.ArrayList; 9 import java.util.Arrays; 10 import java.util.List; 11 12 /** 13 * A system service interface delegate for IWifiScanner. 14 * 15 * <p>By default, Robolectric will provide stub return results for any IWifiScanner calls. This 16 * delegate is used whenever more substantial logic is needed. 17 */ 18 class WifiScannerDelegate { getMessenger()19 public Messenger getMessenger() { 20 return new Messenger(new Handler(Looper.getMainLooper())); 21 } 22 getAvailableChannels(int band, String packageName, String featureId)23 public Bundle getAvailableChannels(int band, String packageName, String featureId) { 24 Bundle bundle = new Bundle(); 25 26 // Mock available WiFi channels. See https://en.wikipedia.org/wiki/List_of_WLAN_channels 27 List<Integer> availableChannels = new ArrayList<>(); 28 29 switch (band) { 30 case WifiScanner.WIFI_BAND_24_GHZ: 31 availableChannels = 32 Arrays.asList( 33 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2477); 34 break; 35 case WifiScanner.WIFI_BAND_5_GHZ_WITH_DFS: 36 availableChannels = 37 Arrays.asList( 38 5180, 5200, 5220, 5240, 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 39 5620, 5640, 5660, 5680, 5700, 5720, 5745, 5765, 5785, 5805, 5825, 5845, 5865, 5885, 40 5905, 5925, 5945, 5965, 5985); 41 break; 42 case WifiScanner.WIFI_BAND_BOTH_WITH_DFS: 43 availableChannels = 44 Arrays.asList( 45 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2477, 46 5180, 5200, 5220, 5240, 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 47 5620, 5640, 5660, 5680, 5700, 5720, 5745, 5765, 5785, 5805, 5825, 5845, 5865, 5885, 48 5905, 5925, 5945, 5965, 5985); 49 break; 50 case WifiScanner.WIFI_BAND_6_GHZ: 51 availableChannels = 52 Arrays.asList( 53 5975, 5995, 6015, 6035, 6055, 6075, 6095, 6115, 6135, 6155, 6175, 6195, 6215, 6235, 54 6255, 6275, 6295, 6315, 6335, 6355, 6375, 6395, 6415, 6435); 55 break; 56 case WifiScanner.WIFI_BAND_24_5_WITH_DFS_6_GHZ: 57 availableChannels = 58 Arrays.asList( 59 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2477, 60 5180, 5200, 5220, 5240, 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 61 5620, 5640, 5660, 5680, 5700, 5720, 5745, 5765, 5785, 5805, 5825, 5845, 5865, 5885, 62 5905, 5925, 5945, 5965, 5985, 6015, 6035, 6055, 6075, 6095, 6115, 6135, 6155, 6175, 63 6195, 6215, 6235, 6255, 6275, 6295, 6315, 6335, 6355, 6375, 6395, 6415, 6435); 64 break; 65 case WifiScanner.WIFI_BAND_60_GHZ: 66 availableChannels = 67 Arrays.asList( 68 58320, 58340, 58360, 58380, 58400, 58420, 58440, 58460, 58480, 58500, 58520, 58540, 69 58560, 58580, 58600, 58620, 58640, 58660, 58680, 58700, 58720, 58740, 58760, 58780, 70 58800, 58820, 58840, 58860, 58880, 58900, 58920, 58940, 58960, 58980, 59000, 59020, 71 59040, 59060, 59080, 59100, 59120, 59140, 59160, 59180, 59200, 59220, 59240, 59260, 72 59280, 59300, 59320, 59340, 59360, 59380, 59400, 59420, 59440, 59460, 59480, 59500, 73 59520, 59540, 59560, 59580, 59600, 59620, 59640, 59660, 59680, 59700, 59720, 59740, 74 59760, 59780, 59800, 59820, 59840, 59860, 59880, 59900, 59920, 59940, 59960, 59980); 75 break; 76 case WifiScanner.WIFI_BAND_24_5_WITH_DFS_6_60_GHZ: 77 case WifiScanner.WIFI_BAND_UNSPECIFIED: 78 default: 79 availableChannels = 80 Arrays.asList( 81 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2477, 82 5180, 5200, 5220, 5240, 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, 5580, 5600, 83 5620, 5640, 5660, 5680, 5700, 5720, 5745, 5765, 5785, 5805, 5825, 5845, 5865, 5885, 84 5905, 5925, 5945, 5965, 5985, 6015, 6035, 6055, 6075, 6095, 6115, 6135, 6155, 6175, 85 6195, 6215, 6235, 6255, 6275, 6295, 6315, 6335, 6355, 6375, 6395, 6415, 6435, 58320, 86 58340, 58360, 58380, 58400, 58420, 58440, 58460, 58480, 58500, 58520, 58540, 58560, 87 58580, 58600, 58620, 58640, 58660, 58680, 58700, 58720, 58740, 58760, 58780, 58800, 88 58820, 58840, 58860, 58880, 58900, 58920, 58940, 58960, 58980, 59000, 59020, 59040, 89 59060, 59080, 59100, 59120, 59140, 59160, 59180, 59200, 59220, 59240, 59260, 59280, 90 59300, 59320, 59340, 59360, 59380, 59400, 59420, 59440, 59460, 59480, 59500, 59520, 91 59540, 59560, 59580, 59600, 59620, 59640, 59660, 59680, 59700, 59720, 59740, 59760, 92 59780, 59800, 59820, 59840, 59860, 59880, 59900, 59920, 59940, 59960, 59980); 93 break; 94 } 95 96 bundle.putIntegerArrayList( 97 WifiScanner.GET_AVAILABLE_CHANNELS_EXTRA, new ArrayList<>(availableChannels)); 98 99 return bundle; 100 } 101 getAvailableChannels( int band, String packageName, String featureId, Bundle extras)102 public Bundle getAvailableChannels( 103 int band, String packageName, String featureId, Bundle extras) { 104 return getAvailableChannels(band, packageName, featureId); 105 } 106 } 107