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