From 054700a4720ace975f2c6fe19a0bbf0920566ada Mon Sep 17 00:00:00 2001 From: Dheeraj Shetty Date: Thu, 23 May 2019 18:22:05 -0700 Subject: [PATCH 1/2] CarrierConfig: get configs by prefix Get configs using the prefix of components like gps, wifi or ims. Add a new ims class for configs related to ims stack. Bug: 132286782 Test: Build Change-Id: Ib20ac3b3c55156913284268439102fba7e96dad7 --- api/current.txt | 5 ++ .../telephony/CarrierConfigManager.java | 89 +++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/api/current.txt b/api/current.txt index cd78602d9cd9e..c6849b23f20e7 100644 --- a/api/current.txt +++ b/api/current.txt @@ -43963,6 +43963,7 @@ package android.telephony { public class CarrierConfigManager { method @Nullable public android.os.PersistableBundle getConfig(); + method @Nullable public android.os.PersistableBundle getConfigByComponentForSubId(String, int); method @Nullable public android.os.PersistableBundle getConfigForSubId(int); method public static boolean isConfigForIdentifiedCarrier(android.os.PersistableBundle); method public void notifyConfigChangedForSubId(int); @@ -44140,6 +44141,10 @@ package android.telephony { field public static final String KEY_WORLD_PHONE_BOOL = "world_phone_bool"; } + public static final class CarrierConfigManager.Ims { + field public static final String KEY_PREFIX = "ims."; + } + public abstract class CellIdentity implements android.os.Parcelable { method public int describeContents(); method @Nullable public CharSequence getOperatorAlphaLong(); diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 19f8203f75020..13cdb560df818 100755 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -2976,6 +2976,23 @@ public class CarrierConfigManager { public static final String KEY_IS_OPPORTUNISTIC_SUBSCRIPTION_BOOL = "is_opportunistic_subscription_bool"; + /** + * Configs used by the IMS stack. + */ + public static final class Ims { + /** Prefix of all Ims.KEY_* constants. */ + public static final String KEY_PREFIX = "ims."; + + //TODO: Add configs related to IMS. + + private Ims() {} + + private static PersistableBundle getDefaults() { + PersistableBundle defaults = new PersistableBundle(); + return defaults; + } + } + /** * A list of 4 GSM RSSI thresholds above which a signal level is considered POOR, * MODERATE, GOOD, or EXCELLENT, to be used in SignalStrength reporting. @@ -3407,6 +3424,7 @@ public class CarrierConfigManager { -89, /* SIGNAL_STRENGTH_GREAT */ }); sDefaults.putBoolean(KEY_SUPPORT_WPS_OVER_IMS_BOOL, true); + sDefaults.putAll(Ims.getDefaults()); } /** @@ -3603,4 +3621,75 @@ public class CarrierConfigManager { return ICarrierConfigLoader.Stub .asInterface(ServiceManager.getService(Context.CARRIER_CONFIG_SERVICE)); } + + /** + * Gets the configuration values for a component using its prefix. + * + *

Requires Permission: + * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} + * + * @param prefix prefix of the component. + * @param subId the subscription ID, normally obtained from {@link SubscriptionManager}. + * + * @see #getConfigForSubId + */ + @Nullable + public PersistableBundle getConfigByComponentForSubId(String prefix, int subId) { + PersistableBundle configs = getConfigForSubId(subId); + + if (configs == null) { + return null; + } + + PersistableBundle ret = new PersistableBundle(); + for (String configKey : configs.keySet()) { + if (configKey.startsWith(prefix)) { + addConfig(configKey, configs.get(configKey), ret); + } + } + + return ret; + } + + private void addConfig(String key, Object value, PersistableBundle configs) { + if (value instanceof String) { + configs.putString(key, (String) value); + } + + if (value instanceof String[]) { + configs.putStringArray(key, (String[]) value); + } + + if (value instanceof Integer) { + configs.putInt(key, (Integer) value); + } + + if (value instanceof Long) { + configs.putLong(key, (Long) value); + } + + if (value instanceof Double) { + configs.putDouble(key, (Double) value); + } + + if (value instanceof Boolean) { + configs.putBoolean(key, (Boolean) value); + } + + if (value instanceof int[]) { + configs.putIntArray(key, (int[]) value); + } + + if (value instanceof double[]) { + configs.putDoubleArray(key, (double[]) value); + } + + if (value instanceof boolean[]) { + configs.putBooleanArray(key, (boolean[]) value); + } + + if (value instanceof long[]) { + configs.putLongArray(key, (long[]) value); + } + } } From 45ba8c60b9e2f9db13ea7b800a55a76b35697b5e Mon Sep 17 00:00:00 2001 From: Dheeraj Shetty Date: Fri, 24 May 2019 10:59:44 -0700 Subject: [PATCH 2/2] ims: API to update ims carreir configs Add a new API in IImsConfig to update carrier configs for ims. Bug: 125484786 Test: Build Change-Id: Id4577b46df514f7948a1d7b1ca58c12abf93b744 --- .../java/android/telephony/ims/aidl/IImsConfig.aidl | 3 +++ .../telephony/ims/stub/ImsConfigImplBase.java | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/telephony/java/android/telephony/ims/aidl/IImsConfig.aidl b/telephony/java/android/telephony/ims/aidl/IImsConfig.aidl index 4433c1c03c1fc..53e4596979582 100644 --- a/telephony/java/android/telephony/ims/aidl/IImsConfig.aidl +++ b/telephony/java/android/telephony/ims/aidl/IImsConfig.aidl @@ -17,6 +17,8 @@ package android.telephony.ims.aidl; +import android.os.PersistableBundle; + import android.telephony.ims.aidl.IImsConfigCallback; import com.android.ims.ImsConfigListener; @@ -37,4 +39,5 @@ interface IImsConfig { int setConfigInt(int item, int value); // Return result code defined in ImsConfig#OperationStatusConstants int setConfigString(int item, String value); + void updateImsCarrierConfigs(in PersistableBundle bundle); } diff --git a/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java b/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java index 321bfff406521..91b0a43844c99 100644 --- a/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java +++ b/telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java @@ -19,6 +19,7 @@ package android.telephony.ims.stub; import android.annotation.IntDef; import android.annotation.SystemApi; import android.content.Context; +import android.os.PersistableBundle; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.telephony.ims.aidl.IImsConfig; @@ -182,6 +183,11 @@ public class ImsConfigImplBase { return retVal; } + @Override + public void updateImsCarrierConfigs(PersistableBundle bundle) throws RemoteException { + getImsConfigImpl().updateImsCarrierConfigs(bundle); + } + private ImsConfigImplBase getImsConfigImpl() throws RemoteException { ImsConfigImplBase ref = mImsConfigImplBaseWeakReference.get(); if (ref == null) { @@ -387,4 +393,11 @@ public class ImsConfigImplBase { // Base Implementation - To be overridden. return null; } + + /** + * @hide + */ + public void updateImsCarrierConfigs(PersistableBundle bundle) { + // Base Implementation - Should be overridden + } }