• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import android.content.pm.PackageManager;
4 import android.os.Build.VERSION_CODES;
5 import android.os.SystemProperties;
6 import com.google.common.collect.ImmutableMap;
7 import java.util.HashMap;
8 import java.util.Map;
9 import org.robolectric.RuntimeEnvironment;
10 
11 final class SystemFeatureListInitializer {
12 
getSystemFeatures()13   public static ImmutableMap<String, Boolean> getSystemFeatures() {
14     int apiLevel = RuntimeEnvironment.getApiLevel();
15     Map<String, Boolean> features = new HashMap<>();
16 
17     features.put(PackageManager.FEATURE_TOUCHSCREEN, true);
18 
19     if (apiLevel >= VERSION_CODES.N_MR1) {
20       features.put(PackageManager.FEATURE_WIFI, true);
21     }
22 
23     if (apiLevel >= VERSION_CODES.O) {
24       features.put(PackageManager.FEATURE_WIFI_AWARE, true);
25       features.put(PackageManager.FEATURE_COMPANION_DEVICE_SETUP, true);
26     }
27 
28     if (apiLevel >= VERSION_CODES.P) {
29       features.put(PackageManager.FEATURE_WIFI_DIRECT, true);
30       features.put(PackageManager.FEATURE_WIFI_RTT, true);
31     }
32 
33     if (apiLevel >= VERSION_CODES.UPSIDE_DOWN_CAKE) {
34       // Starting in V, FEATURE_TELEPHONY_SUBSCRIPTION is required for some system services,
35       // such as VcnManager.
36       features.put(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION, true);
37     }
38     final int vendorApiLevel = SystemProperties.getInt("ro.vendor.api_level", 0);
39     if (vendorApiLevel >= 202404) {
40       // Devices shipped with 2024Q2 or later are required to declare FEATURE_TELEPHONY_*
41       // for individual sub-features (calling, messaging, data)
42       features.put(PackageManager.FEATURE_TELEPHONY_CALLING, true);
43       features.put(PackageManager.FEATURE_TELEPHONY_MESSAGING, true);
44       features.put(PackageManager.FEATURE_TELEPHONY_DATA, true);
45       features.put(PackageManager.FEATURE_TELEPHONY_EUICC, true);
46       features.put(PackageManager.FEATURE_TELEPHONY_EUICC_MEP, true);
47       features.put(PackageManager.FEATURE_TELEPHONY_IMS, true);
48     }
49 
50     return ImmutableMap.copyOf(features);
51   }
52 }
53