Loading proto/src/telephony_config_update.proto +5 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,11 @@ message SatelliteConfigProto { optional int32 version = 1; repeated CarrierSupportedSatelliteServicesProto carrier_supported_satellite_services = 2; optional SatelliteRegionProto device_satellite_region = 3; optional CarrierRoamingConfigProto carrier_roaming_config = 4; } message CarrierRoamingConfigProto { optional int32 max_allowed_data_mode = 1; } message CarrierSupportedSatelliteServicesProto { Loading src/java/com/android/internal/telephony/satellite/SatelliteConfig.java +52 −30 Original line number Diff line number Diff line Loading @@ -53,24 +53,29 @@ public class SatelliteConfig { "satelltie_access_config.json"; private int mVersion; private Map<Integer, Map<String, Set<Integer>>> mSupportedServicesPerCarrier; private Integer mCarrierRoamingMaxAllowedDataMode; private List<String> mSatelliteRegionCountryCodes; private Boolean mIsSatelliteRegionAllowed; private File mSatS2File; private File mSatelliteAccessConfigJsonFile; private SatelliteConfigData.SatelliteConfigProto mConfigData; public SatelliteConfig(SatelliteConfigData.SatelliteConfigProto configData) { public SatelliteConfig(@NonNull SatelliteConfigData.SatelliteConfigProto configData) { mConfigData = configData; mVersion = mConfigData.version; mSupportedServicesPerCarrier = getCarrierSupportedSatelliteServices(); if (mConfigData.carrierRoamingConfig != null) { mCarrierRoamingMaxAllowedDataMode = mConfigData.carrierRoamingConfig.maxAllowedDataMode; } mSatelliteRegionCountryCodes = List.of( mConfigData.deviceSatelliteRegion.countryCodes); mIsSatelliteRegionAllowed = mConfigData.deviceSatelliteRegion.isAllowed; mSatS2File = null; mSatelliteAccessConfigJsonFile = null; Log.d(TAG, "mVersion:" + mVersion + " | " logd("mVersion:" + mVersion + " | " + "mSupportedServicesPerCarrier:" + mSupportedServicesPerCarrier + " | " + "mCarrierRoamingMaxAllowedDataMode:" + mCarrierRoamingMaxAllowedDataMode + " | " + "mSatelliteRegionCountryCodes:" + String.join(",", mSatelliteRegionCountryCodes) + " | " + "mIsSatelliteRegionAllowed:" + mIsSatelliteRegionAllowed + " | " Loading Loading @@ -105,6 +110,20 @@ public class SatelliteConfig { return carrierToServicesMap; } /** * @return An {@link Integer} representing the value of * {@code mCarrierRoamingMaxAllowedDataMode}. Returns {@code null} if it is not set, * which usually implies missing or incomplete configuration */ @Nullable public Integer getSatelliteMaxAllowedDataMode() { if (mCarrierRoamingMaxAllowedDataMode != null) { return mCarrierRoamingMaxAllowedDataMode; } logd("mCarrierRoamingMaxAllowedDataMode : mConfigData is null or no config data"); return null; } /** * Get satellite plmns for carrier * Loading @@ -120,7 +139,7 @@ public class SatelliteConfig { return new ArrayList<>(satelliteCapabilitiesMap.keySet()); } } Log.d(TAG, "getAllSatellitePlmnsForCarrier : mConfigData is null or no config data"); logd("getAllSatellitePlmnsForCarrier : mConfigData is null or no config data"); return new ArrayList<>(); } Loading @@ -139,10 +158,10 @@ public class SatelliteConfig { if (satelliteCapaMap != null) { return satelliteCapaMap; } else { Log.d(TAG, "No supported services found for carrier=" + carrierId); logd("No supported services found for carrier=" + carrierId); } } else { Log.d(TAG, "mSupportedServicesPerCarrier is null"); logd("mSupportedServicesPerCarrier is null"); } return new HashMap<>(); } Loading @@ -168,7 +187,7 @@ public class SatelliteConfig { if (mSatelliteRegionCountryCodes != null) { return mSatelliteRegionCountryCodes; } Log.d(TAG, "getDeviceSatelliteCountryCodes : mConfigData is null or no config data"); logd("getDeviceSatelliteCountryCodes : mConfigData is null or no config data"); return new ArrayList<>(); } Loading @@ -178,7 +197,7 @@ public class SatelliteConfig { @Nullable public Boolean isSatelliteDataForAllowedRegion() { if (mIsSatelliteRegionAllowed == null) { Log.d(TAG, "getIsSatelliteRegionAllowed : mConfigData is null or no config data"); logd("getIsSatelliteRegionAllowed : mConfigData is null or no config data"); } return mIsSatelliteRegionAllowed; } Loading @@ -191,12 +210,12 @@ public class SatelliteConfig { @Nullable public File getSatelliteS2CellFile(@Nullable Context context) { if (context == null) { Log.d(TAG, "getSatelliteS2CellFile : context is null"); logd("getSatelliteS2CellFile : context is null"); return null; } if (isFileExist(mSatS2File)) { Log.d(TAG, "File mSatS2File is already exist"); logd("File mSatS2File is already exist"); return mSatS2File; } Loading @@ -205,7 +224,7 @@ public class SatelliteConfig { context, mConfigData.deviceSatelliteRegion.s2CellFile, S2_CELL_FILE_NAME); return mSatS2File; } Log.d(TAG, "getSatelliteS2CellFile: " logd("getSatelliteS2CellFile: " + "mConfigData is null or mConfigData.deviceSatelliteRegion is null"); return null; } Loading @@ -217,12 +236,12 @@ public class SatelliteConfig { @Nullable public File getSatelliteAccessConfigJsonFile(@Nullable Context context) { if (context == null) { Log.d(TAG, "getSatelliteAccessConfigJsonFile : context is null"); logd("getSatelliteAccessConfigJsonFile : context is null"); return null; } if (isFileExist(mSatelliteAccessConfigJsonFile)) { Log.d(TAG, "File mSatelliteAccessConfigJsonFile is already exist"); logd("File mSatelliteAccessConfigJsonFile is already exist"); return mSatelliteAccessConfigJsonFile; } Loading @@ -232,7 +251,7 @@ public class SatelliteConfig { SATELLITE_ACCESS_CONFIG_JSON_FILE_NAME); return mSatelliteAccessConfigJsonFile; } Log.d(TAG, "mSatelliteAccessConfigJsonFile: " logd("mSatelliteAccessConfigJsonFile: " + "mConfigData is null or mConfigData.deviceSatelliteRegion is null"); return null; } Loading @@ -244,7 +263,7 @@ public class SatelliteConfig { */ @NonNull public int getSatelliteConfigDataVersion() { Log.d(TAG, "getSatelliteConfigDataVersion: mVersion: " + mVersion); logd("getSatelliteConfigDataVersion: mVersion: " + mVersion); return mVersion; } Loading @@ -259,7 +278,7 @@ public class SatelliteConfig { @Nullable byte[] byteArrayFile, String fileName) { if (context == null || byteArrayFile == null) { Log.d(TAG, "copySatelliteFileToPhoneDirectory : context or byteArrayFile are null"); logd("copySatelliteFileToPhoneDirectory : context or byteArrayFile are null"); return null; } Loading @@ -272,18 +291,16 @@ public class SatelliteConfig { try { InputStream inputStream = new ByteArrayInputStream(byteArrayFile); if (inputStream == null) { Log.d(TAG, "copySatelliteFileToPhoneDirectory: Resource=" + fileName logd("copySatelliteFileToPhoneDirectory: Resource=" + fileName + " not found"); } else { Files.copy(inputStream, targetSatelliteFilePath, StandardCopyOption.REPLACE_EXISTING); } } catch (IOException ex) { Log.e(TAG, "copySatelliteFileToPhoneDirectory: ex=" + ex); loge("copySatelliteFileToPhoneDirectory: ex=" + ex); } Log.d( TAG, "targetSatelliteFilePath's path: " logd("targetSatelliteFilePath's path: " + targetSatelliteFilePath.toAbsolutePath().toString()); return targetSatelliteFilePath.toFile(); } Loading @@ -295,23 +312,20 @@ public class SatelliteConfig { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public void cleanOtaResources(@Nullable Context context) { if (context == null) { Log.d(TAG, "cleanOtaResources : context is null"); logd("cleanOtaResources : context is null"); return; } try { File satelliteFileDir = context.getDir(SATELLITE_DIR_NAME, Context.MODE_PRIVATE); if (!satelliteFileDir.exists()) { Log.d( TAG, "cleanOtaResources: " + SATELLITE_DIR_NAME logd("cleanOtaResources: " + SATELLITE_DIR_NAME + " does not exist. No need to clean."); return; } Log.d(TAG, "cleanOtaResources: Deleting contents under " + SATELLITE_DIR_NAME); logd("cleanOtaResources: Deleting contents under " + SATELLITE_DIR_NAME); FileUtils.deleteContents(satelliteFileDir); } catch (Exception e) { Log.e(TAG, "cleanOtaResources error : " + e); loge("cleanOtaResources error : " + e); } } Loading @@ -321,9 +335,17 @@ public class SatelliteConfig { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public boolean isFileExist(@Nullable File file) { if (file == null) { Log.d(TAG, "isFileExist : file is null"); logd("isFileExist : file is null"); return false; } return file.exists(); } private static void logd(@NonNull String log) { Log.d(TAG, log); } private static void loge(@NonNull String log) { Log.e(TAG, log); } } src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -3644,7 +3644,10 @@ public class SubscriptionManagerService extends ISub.Stub { + "carrier privilege"); } if (!mContext.getResources().getBoolean( com.android.internal.R.bool.config_force_phone_globals_creation)) { enforceTelephonyFeatureWithException(callingPackage, "isActiveSubId"); } final long identity = Binder.clearCallingIdentity(); try { Loading tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteConfigParserTest.java +178 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,13 @@ public class SatelliteConfigParserTest extends TelephonyTest { // carriersupportedservices#carrier_id carrierSupportedSatelliteServiceBuilder.setCarrierId(1); // carrierroamingconfig SatelliteConfigData.CarrierRoamingConfigProto.Builder carrierRoamingConfigBuilder = SatelliteConfigData.CarrierRoamingConfigProto.newBuilder(); carrierRoamingConfigBuilder.setMaxAllowedDataMode(2); satelliteConfigBuilder.setCarrierRoamingConfig(carrierRoamingConfigBuilder); carrierRoamingConfigBuilder.clear(); // carriersupportedservices#providercapability SatelliteConfigData.SatelliteProviderCapabilityProto.Builder satelliteProviderCapabilityBuilder = Loading Loading @@ -379,4 +386,175 @@ public class SatelliteConfigParserTest extends TelephonyTest { assertNotNull(satelliteConfigParser.getConfig()); assertEquals(4, satelliteConfigParser.getConfig().getSatelliteConfigDataVersion()); } @Test public void testGetCarrierRoamingConfigMaxAllowedDataMode() { SatelliteConfigParser satelliteConfigParserNull = new SatelliteConfigParser((byte[]) null); assertNotNull(satelliteConfigParserNull); assertNull(satelliteConfigParserNull.getConfig()); SatelliteConfigParser satelliteConfigParserPlaceholder = new SatelliteConfigParser("test".getBytes()); assertNotNull(satelliteConfigParserPlaceholder); assertNull(satelliteConfigParserPlaceholder.getConfig()); SatelliteConfigParser satelliteConfigParser = new SatelliteConfigParser(mBytesProtoBuffer); assertNotNull(satelliteConfigParser); assertNotNull(satelliteConfigParser.getConfig()); assertNotNull(satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); assertEquals(Integer.valueOf(2), satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); } @Test public void testNullCarrierRoamingConfig() { SatelliteConfigData.TelephonyConfigProto.Builder telephonyConfigBuilder = SatelliteConfigData.TelephonyConfigProto.newBuilder(); SatelliteConfigData.SatelliteConfigProto.Builder satelliteConfigBuilder = SatelliteConfigData.SatelliteConfigProto.newBuilder(); // version satelliteConfigBuilder.setVersion(4); // carriersupportedservices SatelliteConfigData.CarrierSupportedSatelliteServicesProto.Builder carrierSupportedSatelliteServiceBuilder = SatelliteConfigData.CarrierSupportedSatelliteServicesProto.newBuilder(); // carriersupportedservices#carrier_id carrierSupportedSatelliteServiceBuilder.setCarrierId(1); // not building carrierroamingconfig // carriersupportedservices#providercapability SatelliteConfigData.SatelliteProviderCapabilityProto.Builder satelliteProviderCapabilityBuilder = SatelliteConfigData.SatelliteProviderCapabilityProto.newBuilder(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310160"); satelliteProviderCapabilityBuilder.addAllowedServices(1); satelliteProviderCapabilityBuilder.addAllowedServices(2); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310220"); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteConfigBuilder.addCarrierSupportedSatelliteServices( carrierSupportedSatelliteServiceBuilder); // satelliteregion SatelliteConfigData.SatelliteRegionProto.Builder satelliteRegionBuilder = SatelliteConfigData.SatelliteRegionProto.newBuilder(); String testS2Content = "0123456789", testSatelliteAccessConfigContent = "sac"; satelliteRegionBuilder.setS2CellFile(ByteString.copyFrom(testS2Content.getBytes())); satelliteRegionBuilder.setSatelliteAccessConfigFile( ByteString.copyFrom(testSatelliteAccessConfigContent.getBytes())); satelliteRegionBuilder.addCountryCodes("US"); satelliteRegionBuilder.setIsAllowed(true); satelliteConfigBuilder.setDeviceSatelliteRegion(satelliteRegionBuilder); telephonyConfigBuilder.setSatellite(satelliteConfigBuilder); SatelliteConfigData.TelephonyConfigProto telephonyConfigData = telephonyConfigBuilder.build(); mBytesProtoBuffer = telephonyConfigData.toByteArray(); SatelliteConfigParser satelliteConfigParserNull = new SatelliteConfigParser((byte[]) null); assertNotNull(satelliteConfigParserNull); assertNull(satelliteConfigParserNull.getConfig()); SatelliteConfigParser satelliteConfigParserPlaceholder = new SatelliteConfigParser("test".getBytes()); assertNotNull(satelliteConfigParserPlaceholder); assertNull(satelliteConfigParserPlaceholder.getConfig()); SatelliteConfigParser satelliteConfigParser = new SatelliteConfigParser(mBytesProtoBuffer); assertNotNull(satelliteConfigParser); assertNotNull(satelliteConfigParser.getConfig()); assertNull(satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); } @Test public void testNullMaxAllowedDataMode() { SatelliteConfigData.TelephonyConfigProto.Builder telephonyConfigBuilder = SatelliteConfigData.TelephonyConfigProto.newBuilder(); SatelliteConfigData.SatelliteConfigProto.Builder satelliteConfigBuilder = SatelliteConfigData.SatelliteConfigProto.newBuilder(); // version satelliteConfigBuilder.setVersion(4); // carriersupportedservices SatelliteConfigData.CarrierSupportedSatelliteServicesProto.Builder carrierSupportedSatelliteServiceBuilder = SatelliteConfigData.CarrierSupportedSatelliteServicesProto.newBuilder(); // carriersupportedservices#carrier_id carrierSupportedSatelliteServiceBuilder.setCarrierId(1); // carrierroamingconfig, but not setting maxAllowedDataMode SatelliteConfigData.CarrierRoamingConfigProto.Builder carrierRoamingConfigBuilder = SatelliteConfigData.CarrierRoamingConfigProto.newBuilder(); satelliteConfigBuilder.setCarrierRoamingConfig(carrierRoamingConfigBuilder); carrierRoamingConfigBuilder.clear(); // carriersupportedservices#providercapability SatelliteConfigData.SatelliteProviderCapabilityProto.Builder satelliteProviderCapabilityBuilder = SatelliteConfigData.SatelliteProviderCapabilityProto.newBuilder(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310160"); satelliteProviderCapabilityBuilder.addAllowedServices(1); satelliteProviderCapabilityBuilder.addAllowedServices(2); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310220"); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteConfigBuilder.addCarrierSupportedSatelliteServices( carrierSupportedSatelliteServiceBuilder); // satelliteregion SatelliteConfigData.SatelliteRegionProto.Builder satelliteRegionBuilder = SatelliteConfigData.SatelliteRegionProto.newBuilder(); String testS2Content = "0123456789", testSatelliteAccessConfigContent = "sac"; satelliteRegionBuilder.setS2CellFile(ByteString.copyFrom(testS2Content.getBytes())); satelliteRegionBuilder.setSatelliteAccessConfigFile( ByteString.copyFrom(testSatelliteAccessConfigContent.getBytes())); satelliteRegionBuilder.addCountryCodes("US"); satelliteRegionBuilder.setIsAllowed(true); satelliteConfigBuilder.setDeviceSatelliteRegion(satelliteRegionBuilder); telephonyConfigBuilder.setSatellite(satelliteConfigBuilder); SatelliteConfigData.TelephonyConfigProto telephonyConfigData = telephonyConfigBuilder.build(); mBytesProtoBuffer = telephonyConfigData.toByteArray(); SatelliteConfigParser satelliteConfigParserNull = new SatelliteConfigParser((byte[]) null); assertNotNull(satelliteConfigParserNull); assertNull(satelliteConfigParserNull.getConfig()); SatelliteConfigParser satelliteConfigParserPlaceholder = new SatelliteConfigParser("test".getBytes()); assertNotNull(satelliteConfigParserPlaceholder); assertNull(satelliteConfigParserPlaceholder.getConfig()); SatelliteConfigParser satelliteConfigParser = new SatelliteConfigParser(mBytesProtoBuffer); assertNotNull(satelliteConfigParser); assertNotNull(satelliteConfigParser.getConfig()); assertNotNull(satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); assertEquals(Integer.valueOf(0), satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); } } Loading
proto/src/telephony_config_update.proto +5 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,11 @@ message SatelliteConfigProto { optional int32 version = 1; repeated CarrierSupportedSatelliteServicesProto carrier_supported_satellite_services = 2; optional SatelliteRegionProto device_satellite_region = 3; optional CarrierRoamingConfigProto carrier_roaming_config = 4; } message CarrierRoamingConfigProto { optional int32 max_allowed_data_mode = 1; } message CarrierSupportedSatelliteServicesProto { Loading
src/java/com/android/internal/telephony/satellite/SatelliteConfig.java +52 −30 Original line number Diff line number Diff line Loading @@ -53,24 +53,29 @@ public class SatelliteConfig { "satelltie_access_config.json"; private int mVersion; private Map<Integer, Map<String, Set<Integer>>> mSupportedServicesPerCarrier; private Integer mCarrierRoamingMaxAllowedDataMode; private List<String> mSatelliteRegionCountryCodes; private Boolean mIsSatelliteRegionAllowed; private File mSatS2File; private File mSatelliteAccessConfigJsonFile; private SatelliteConfigData.SatelliteConfigProto mConfigData; public SatelliteConfig(SatelliteConfigData.SatelliteConfigProto configData) { public SatelliteConfig(@NonNull SatelliteConfigData.SatelliteConfigProto configData) { mConfigData = configData; mVersion = mConfigData.version; mSupportedServicesPerCarrier = getCarrierSupportedSatelliteServices(); if (mConfigData.carrierRoamingConfig != null) { mCarrierRoamingMaxAllowedDataMode = mConfigData.carrierRoamingConfig.maxAllowedDataMode; } mSatelliteRegionCountryCodes = List.of( mConfigData.deviceSatelliteRegion.countryCodes); mIsSatelliteRegionAllowed = mConfigData.deviceSatelliteRegion.isAllowed; mSatS2File = null; mSatelliteAccessConfigJsonFile = null; Log.d(TAG, "mVersion:" + mVersion + " | " logd("mVersion:" + mVersion + " | " + "mSupportedServicesPerCarrier:" + mSupportedServicesPerCarrier + " | " + "mCarrierRoamingMaxAllowedDataMode:" + mCarrierRoamingMaxAllowedDataMode + " | " + "mSatelliteRegionCountryCodes:" + String.join(",", mSatelliteRegionCountryCodes) + " | " + "mIsSatelliteRegionAllowed:" + mIsSatelliteRegionAllowed + " | " Loading Loading @@ -105,6 +110,20 @@ public class SatelliteConfig { return carrierToServicesMap; } /** * @return An {@link Integer} representing the value of * {@code mCarrierRoamingMaxAllowedDataMode}. Returns {@code null} if it is not set, * which usually implies missing or incomplete configuration */ @Nullable public Integer getSatelliteMaxAllowedDataMode() { if (mCarrierRoamingMaxAllowedDataMode != null) { return mCarrierRoamingMaxAllowedDataMode; } logd("mCarrierRoamingMaxAllowedDataMode : mConfigData is null or no config data"); return null; } /** * Get satellite plmns for carrier * Loading @@ -120,7 +139,7 @@ public class SatelliteConfig { return new ArrayList<>(satelliteCapabilitiesMap.keySet()); } } Log.d(TAG, "getAllSatellitePlmnsForCarrier : mConfigData is null or no config data"); logd("getAllSatellitePlmnsForCarrier : mConfigData is null or no config data"); return new ArrayList<>(); } Loading @@ -139,10 +158,10 @@ public class SatelliteConfig { if (satelliteCapaMap != null) { return satelliteCapaMap; } else { Log.d(TAG, "No supported services found for carrier=" + carrierId); logd("No supported services found for carrier=" + carrierId); } } else { Log.d(TAG, "mSupportedServicesPerCarrier is null"); logd("mSupportedServicesPerCarrier is null"); } return new HashMap<>(); } Loading @@ -168,7 +187,7 @@ public class SatelliteConfig { if (mSatelliteRegionCountryCodes != null) { return mSatelliteRegionCountryCodes; } Log.d(TAG, "getDeviceSatelliteCountryCodes : mConfigData is null or no config data"); logd("getDeviceSatelliteCountryCodes : mConfigData is null or no config data"); return new ArrayList<>(); } Loading @@ -178,7 +197,7 @@ public class SatelliteConfig { @Nullable public Boolean isSatelliteDataForAllowedRegion() { if (mIsSatelliteRegionAllowed == null) { Log.d(TAG, "getIsSatelliteRegionAllowed : mConfigData is null or no config data"); logd("getIsSatelliteRegionAllowed : mConfigData is null or no config data"); } return mIsSatelliteRegionAllowed; } Loading @@ -191,12 +210,12 @@ public class SatelliteConfig { @Nullable public File getSatelliteS2CellFile(@Nullable Context context) { if (context == null) { Log.d(TAG, "getSatelliteS2CellFile : context is null"); logd("getSatelliteS2CellFile : context is null"); return null; } if (isFileExist(mSatS2File)) { Log.d(TAG, "File mSatS2File is already exist"); logd("File mSatS2File is already exist"); return mSatS2File; } Loading @@ -205,7 +224,7 @@ public class SatelliteConfig { context, mConfigData.deviceSatelliteRegion.s2CellFile, S2_CELL_FILE_NAME); return mSatS2File; } Log.d(TAG, "getSatelliteS2CellFile: " logd("getSatelliteS2CellFile: " + "mConfigData is null or mConfigData.deviceSatelliteRegion is null"); return null; } Loading @@ -217,12 +236,12 @@ public class SatelliteConfig { @Nullable public File getSatelliteAccessConfigJsonFile(@Nullable Context context) { if (context == null) { Log.d(TAG, "getSatelliteAccessConfigJsonFile : context is null"); logd("getSatelliteAccessConfigJsonFile : context is null"); return null; } if (isFileExist(mSatelliteAccessConfigJsonFile)) { Log.d(TAG, "File mSatelliteAccessConfigJsonFile is already exist"); logd("File mSatelliteAccessConfigJsonFile is already exist"); return mSatelliteAccessConfigJsonFile; } Loading @@ -232,7 +251,7 @@ public class SatelliteConfig { SATELLITE_ACCESS_CONFIG_JSON_FILE_NAME); return mSatelliteAccessConfigJsonFile; } Log.d(TAG, "mSatelliteAccessConfigJsonFile: " logd("mSatelliteAccessConfigJsonFile: " + "mConfigData is null or mConfigData.deviceSatelliteRegion is null"); return null; } Loading @@ -244,7 +263,7 @@ public class SatelliteConfig { */ @NonNull public int getSatelliteConfigDataVersion() { Log.d(TAG, "getSatelliteConfigDataVersion: mVersion: " + mVersion); logd("getSatelliteConfigDataVersion: mVersion: " + mVersion); return mVersion; } Loading @@ -259,7 +278,7 @@ public class SatelliteConfig { @Nullable byte[] byteArrayFile, String fileName) { if (context == null || byteArrayFile == null) { Log.d(TAG, "copySatelliteFileToPhoneDirectory : context or byteArrayFile are null"); logd("copySatelliteFileToPhoneDirectory : context or byteArrayFile are null"); return null; } Loading @@ -272,18 +291,16 @@ public class SatelliteConfig { try { InputStream inputStream = new ByteArrayInputStream(byteArrayFile); if (inputStream == null) { Log.d(TAG, "copySatelliteFileToPhoneDirectory: Resource=" + fileName logd("copySatelliteFileToPhoneDirectory: Resource=" + fileName + " not found"); } else { Files.copy(inputStream, targetSatelliteFilePath, StandardCopyOption.REPLACE_EXISTING); } } catch (IOException ex) { Log.e(TAG, "copySatelliteFileToPhoneDirectory: ex=" + ex); loge("copySatelliteFileToPhoneDirectory: ex=" + ex); } Log.d( TAG, "targetSatelliteFilePath's path: " logd("targetSatelliteFilePath's path: " + targetSatelliteFilePath.toAbsolutePath().toString()); return targetSatelliteFilePath.toFile(); } Loading @@ -295,23 +312,20 @@ public class SatelliteConfig { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public void cleanOtaResources(@Nullable Context context) { if (context == null) { Log.d(TAG, "cleanOtaResources : context is null"); logd("cleanOtaResources : context is null"); return; } try { File satelliteFileDir = context.getDir(SATELLITE_DIR_NAME, Context.MODE_PRIVATE); if (!satelliteFileDir.exists()) { Log.d( TAG, "cleanOtaResources: " + SATELLITE_DIR_NAME logd("cleanOtaResources: " + SATELLITE_DIR_NAME + " does not exist. No need to clean."); return; } Log.d(TAG, "cleanOtaResources: Deleting contents under " + SATELLITE_DIR_NAME); logd("cleanOtaResources: Deleting contents under " + SATELLITE_DIR_NAME); FileUtils.deleteContents(satelliteFileDir); } catch (Exception e) { Log.e(TAG, "cleanOtaResources error : " + e); loge("cleanOtaResources error : " + e); } } Loading @@ -321,9 +335,17 @@ public class SatelliteConfig { @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) public boolean isFileExist(@Nullable File file) { if (file == null) { Log.d(TAG, "isFileExist : file is null"); logd("isFileExist : file is null"); return false; } return file.exists(); } private static void logd(@NonNull String log) { Log.d(TAG, log); } private static void loge(@NonNull String log) { Log.e(TAG, log); } }
src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java +4 −1 Original line number Diff line number Diff line Loading @@ -3644,7 +3644,10 @@ public class SubscriptionManagerService extends ISub.Stub { + "carrier privilege"); } if (!mContext.getResources().getBoolean( com.android.internal.R.bool.config_force_phone_globals_creation)) { enforceTelephonyFeatureWithException(callingPackage, "isActiveSubId"); } final long identity = Binder.clearCallingIdentity(); try { Loading
tests/telephonytests/src/com/android/internal/telephony/satellite/SatelliteConfigParserTest.java +178 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,13 @@ public class SatelliteConfigParserTest extends TelephonyTest { // carriersupportedservices#carrier_id carrierSupportedSatelliteServiceBuilder.setCarrierId(1); // carrierroamingconfig SatelliteConfigData.CarrierRoamingConfigProto.Builder carrierRoamingConfigBuilder = SatelliteConfigData.CarrierRoamingConfigProto.newBuilder(); carrierRoamingConfigBuilder.setMaxAllowedDataMode(2); satelliteConfigBuilder.setCarrierRoamingConfig(carrierRoamingConfigBuilder); carrierRoamingConfigBuilder.clear(); // carriersupportedservices#providercapability SatelliteConfigData.SatelliteProviderCapabilityProto.Builder satelliteProviderCapabilityBuilder = Loading Loading @@ -379,4 +386,175 @@ public class SatelliteConfigParserTest extends TelephonyTest { assertNotNull(satelliteConfigParser.getConfig()); assertEquals(4, satelliteConfigParser.getConfig().getSatelliteConfigDataVersion()); } @Test public void testGetCarrierRoamingConfigMaxAllowedDataMode() { SatelliteConfigParser satelliteConfigParserNull = new SatelliteConfigParser((byte[]) null); assertNotNull(satelliteConfigParserNull); assertNull(satelliteConfigParserNull.getConfig()); SatelliteConfigParser satelliteConfigParserPlaceholder = new SatelliteConfigParser("test".getBytes()); assertNotNull(satelliteConfigParserPlaceholder); assertNull(satelliteConfigParserPlaceholder.getConfig()); SatelliteConfigParser satelliteConfigParser = new SatelliteConfigParser(mBytesProtoBuffer); assertNotNull(satelliteConfigParser); assertNotNull(satelliteConfigParser.getConfig()); assertNotNull(satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); assertEquals(Integer.valueOf(2), satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); } @Test public void testNullCarrierRoamingConfig() { SatelliteConfigData.TelephonyConfigProto.Builder telephonyConfigBuilder = SatelliteConfigData.TelephonyConfigProto.newBuilder(); SatelliteConfigData.SatelliteConfigProto.Builder satelliteConfigBuilder = SatelliteConfigData.SatelliteConfigProto.newBuilder(); // version satelliteConfigBuilder.setVersion(4); // carriersupportedservices SatelliteConfigData.CarrierSupportedSatelliteServicesProto.Builder carrierSupportedSatelliteServiceBuilder = SatelliteConfigData.CarrierSupportedSatelliteServicesProto.newBuilder(); // carriersupportedservices#carrier_id carrierSupportedSatelliteServiceBuilder.setCarrierId(1); // not building carrierroamingconfig // carriersupportedservices#providercapability SatelliteConfigData.SatelliteProviderCapabilityProto.Builder satelliteProviderCapabilityBuilder = SatelliteConfigData.SatelliteProviderCapabilityProto.newBuilder(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310160"); satelliteProviderCapabilityBuilder.addAllowedServices(1); satelliteProviderCapabilityBuilder.addAllowedServices(2); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310220"); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteConfigBuilder.addCarrierSupportedSatelliteServices( carrierSupportedSatelliteServiceBuilder); // satelliteregion SatelliteConfigData.SatelliteRegionProto.Builder satelliteRegionBuilder = SatelliteConfigData.SatelliteRegionProto.newBuilder(); String testS2Content = "0123456789", testSatelliteAccessConfigContent = "sac"; satelliteRegionBuilder.setS2CellFile(ByteString.copyFrom(testS2Content.getBytes())); satelliteRegionBuilder.setSatelliteAccessConfigFile( ByteString.copyFrom(testSatelliteAccessConfigContent.getBytes())); satelliteRegionBuilder.addCountryCodes("US"); satelliteRegionBuilder.setIsAllowed(true); satelliteConfigBuilder.setDeviceSatelliteRegion(satelliteRegionBuilder); telephonyConfigBuilder.setSatellite(satelliteConfigBuilder); SatelliteConfigData.TelephonyConfigProto telephonyConfigData = telephonyConfigBuilder.build(); mBytesProtoBuffer = telephonyConfigData.toByteArray(); SatelliteConfigParser satelliteConfigParserNull = new SatelliteConfigParser((byte[]) null); assertNotNull(satelliteConfigParserNull); assertNull(satelliteConfigParserNull.getConfig()); SatelliteConfigParser satelliteConfigParserPlaceholder = new SatelliteConfigParser("test".getBytes()); assertNotNull(satelliteConfigParserPlaceholder); assertNull(satelliteConfigParserPlaceholder.getConfig()); SatelliteConfigParser satelliteConfigParser = new SatelliteConfigParser(mBytesProtoBuffer); assertNotNull(satelliteConfigParser); assertNotNull(satelliteConfigParser.getConfig()); assertNull(satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); } @Test public void testNullMaxAllowedDataMode() { SatelliteConfigData.TelephonyConfigProto.Builder telephonyConfigBuilder = SatelliteConfigData.TelephonyConfigProto.newBuilder(); SatelliteConfigData.SatelliteConfigProto.Builder satelliteConfigBuilder = SatelliteConfigData.SatelliteConfigProto.newBuilder(); // version satelliteConfigBuilder.setVersion(4); // carriersupportedservices SatelliteConfigData.CarrierSupportedSatelliteServicesProto.Builder carrierSupportedSatelliteServiceBuilder = SatelliteConfigData.CarrierSupportedSatelliteServicesProto.newBuilder(); // carriersupportedservices#carrier_id carrierSupportedSatelliteServiceBuilder.setCarrierId(1); // carrierroamingconfig, but not setting maxAllowedDataMode SatelliteConfigData.CarrierRoamingConfigProto.Builder carrierRoamingConfigBuilder = SatelliteConfigData.CarrierRoamingConfigProto.newBuilder(); satelliteConfigBuilder.setCarrierRoamingConfig(carrierRoamingConfigBuilder); carrierRoamingConfigBuilder.clear(); // carriersupportedservices#providercapability SatelliteConfigData.SatelliteProviderCapabilityProto.Builder satelliteProviderCapabilityBuilder = SatelliteConfigData.SatelliteProviderCapabilityProto.newBuilder(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310160"); satelliteProviderCapabilityBuilder.addAllowedServices(1); satelliteProviderCapabilityBuilder.addAllowedServices(2); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteProviderCapabilityBuilder.setCarrierPlmn("310220"); satelliteProviderCapabilityBuilder.addAllowedServices(3); carrierSupportedSatelliteServiceBuilder.addSupportedSatelliteProviderCapabilities( satelliteProviderCapabilityBuilder); satelliteProviderCapabilityBuilder.clear(); satelliteConfigBuilder.addCarrierSupportedSatelliteServices( carrierSupportedSatelliteServiceBuilder); // satelliteregion SatelliteConfigData.SatelliteRegionProto.Builder satelliteRegionBuilder = SatelliteConfigData.SatelliteRegionProto.newBuilder(); String testS2Content = "0123456789", testSatelliteAccessConfigContent = "sac"; satelliteRegionBuilder.setS2CellFile(ByteString.copyFrom(testS2Content.getBytes())); satelliteRegionBuilder.setSatelliteAccessConfigFile( ByteString.copyFrom(testSatelliteAccessConfigContent.getBytes())); satelliteRegionBuilder.addCountryCodes("US"); satelliteRegionBuilder.setIsAllowed(true); satelliteConfigBuilder.setDeviceSatelliteRegion(satelliteRegionBuilder); telephonyConfigBuilder.setSatellite(satelliteConfigBuilder); SatelliteConfigData.TelephonyConfigProto telephonyConfigData = telephonyConfigBuilder.build(); mBytesProtoBuffer = telephonyConfigData.toByteArray(); SatelliteConfigParser satelliteConfigParserNull = new SatelliteConfigParser((byte[]) null); assertNotNull(satelliteConfigParserNull); assertNull(satelliteConfigParserNull.getConfig()); SatelliteConfigParser satelliteConfigParserPlaceholder = new SatelliteConfigParser("test".getBytes()); assertNotNull(satelliteConfigParserPlaceholder); assertNull(satelliteConfigParserPlaceholder.getConfig()); SatelliteConfigParser satelliteConfigParser = new SatelliteConfigParser(mBytesProtoBuffer); assertNotNull(satelliteConfigParser); assertNotNull(satelliteConfigParser.getConfig()); assertNotNull(satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); assertEquals(Integer.valueOf(0), satelliteConfigParser.getConfig().getSatelliteMaxAllowedDataMode()); } }