diff options
-rw-r--r-- | telephony/java/android/telephony/CarrierConfigManager.java | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 63dbeeba8e40..318b01aad076 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -9899,4 +9899,38 @@ public class CarrierConfigManager { } trm.removeCarrierConfigChangedListener(listener); } + + /** + * Get subset of specified carrier configuration if available or empty bundle, without throwing + * {@link RuntimeException} to caller. + * + * <p>This is a system internally used only utility to reduce the repetitive logic. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}, or the calling app + * has carrier privileges on the specified subscription (see + * {@link TelephonyManager#hasCarrierPrivileges()}). + * + * @param context Context used to get the CarrierConfigManager service. + * @param subId The subscription ID to get the config from. + * @param keys The config keys the client is interested in. + * @return Config bundle with key/value for the specified keys or empty bundle when failed + * @hide + */ + @RequiresPermission(anyOf = { + Manifest.permission.READ_PHONE_STATE, + "carrier privileges", + }) + @NonNull + public static PersistableBundle getCarrierConfigSubset( + @NonNull Context context, int subId, @NonNull String... keys) { + PersistableBundle configs = null; + CarrierConfigManager ccm = context.getSystemService(CarrierConfigManager.class); + try { + configs = ccm.getConfigForSubId(subId, keys); + } catch (RuntimeException exception) { + Rlog.w(TAG, "CarrierConfigLoader is not available."); + } + return configs != null ? configs : new PersistableBundle(); + } } |