|
|
|
|
@@ -91,8 +91,7 @@ import java.util.function.Consumer;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* SubscriptionManager is the application interface to SubscriptionController
|
|
|
|
|
* and provides information about the current Telephony Subscriptions.
|
|
|
|
|
* Subscription manager provides the mobile subscription information.
|
|
|
|
|
*/
|
|
|
|
|
@SystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)
|
|
|
|
|
@RequiresFeature(PackageManager.FEATURE_TELEPHONY_SUBSCRIPTION)
|
|
|
|
|
@@ -119,13 +118,12 @@ public class SubscriptionManager {
|
|
|
|
|
public static final int DEFAULT_SUBSCRIPTION_ID = Integer.MAX_VALUE;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Indicates the caller wants the default phone id.
|
|
|
|
|
* Used in SubscriptionController and Phone but do we really need it???
|
|
|
|
|
* Indicates the default phone id.
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
public static final int DEFAULT_PHONE_INDEX = Integer.MAX_VALUE;
|
|
|
|
|
|
|
|
|
|
/** Indicates the caller wants the default slot id. NOT used remove? */
|
|
|
|
|
/** Indicates the default slot index. */
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static final int DEFAULT_SIM_SLOT_INDEX = Integer.MAX_VALUE;
|
|
|
|
|
|
|
|
|
|
@@ -141,29 +139,10 @@ public class SubscriptionManager {
|
|
|
|
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
|
|
|
|
public static final Uri CONTENT_URI = SimInfo.CONTENT_URI;
|
|
|
|
|
|
|
|
|
|
private static final String CACHE_KEY_DEFAULT_SUB_ID_PROPERTY =
|
|
|
|
|
"cache_key.telephony.get_default_sub_id";
|
|
|
|
|
|
|
|
|
|
private static final String CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY =
|
|
|
|
|
"cache_key.telephony.get_default_data_sub_id";
|
|
|
|
|
|
|
|
|
|
private static final String CACHE_KEY_DEFAULT_SMS_SUB_ID_PROPERTY =
|
|
|
|
|
"cache_key.telephony.get_default_sms_sub_id";
|
|
|
|
|
|
|
|
|
|
private static final String CACHE_KEY_ACTIVE_DATA_SUB_ID_PROPERTY =
|
|
|
|
|
"cache_key.telephony.get_active_data_sub_id";
|
|
|
|
|
|
|
|
|
|
private static final String CACHE_KEY_SLOT_INDEX_PROPERTY =
|
|
|
|
|
"cache_key.telephony.get_slot_index";
|
|
|
|
|
|
|
|
|
|
/** The IPC cache key shared by all subscription manager service cacheable properties. */
|
|
|
|
|
private static final String CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY =
|
|
|
|
|
"cache_key.telephony.subscription_manager_service";
|
|
|
|
|
|
|
|
|
|
/** The temporarily cache key to indicate whether subscription manager service is enabled. */
|
|
|
|
|
private static final String CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_ENABLED_PROPERTY =
|
|
|
|
|
"cache_key.telephony.subscription_manager_service_enabled";
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static final String GET_SIM_SPECIFIC_SETTINGS_METHOD_NAME = "getSimSpecificSettings";
|
|
|
|
|
|
|
|
|
|
@@ -273,83 +252,41 @@ public class SubscriptionManager {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sDefaultSubIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getDefaultSubId,
|
|
|
|
|
CACHE_KEY_DEFAULT_SUB_ID_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sGetDefaultSubIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getDefaultSubId,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sDefaultDataSubIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getDefaultDataSubId,
|
|
|
|
|
CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sGetDefaultDataSubIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getDefaultDataSubId,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sDefaultSmsSubIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getDefaultSmsSubId,
|
|
|
|
|
CACHE_KEY_DEFAULT_SMS_SUB_ID_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sGetDefaultSmsSubIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getDefaultSmsSubId,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sActiveDataSubIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getActiveDataSubscriptionId,
|
|
|
|
|
CACHE_KEY_ACTIVE_DATA_SUB_ID_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Integer> sGetActiveDataSubscriptionIdCache =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::getActiveDataSubscriptionId,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static IntegerPropertyInvalidatedCache<Integer> sSlotIndexCache =
|
|
|
|
|
new IntegerPropertyInvalidatedCache<>(ISub::getSlotIndex,
|
|
|
|
|
CACHE_KEY_SLOT_INDEX_PROPERTY,
|
|
|
|
|
INVALID_SIM_SLOT_INDEX);
|
|
|
|
|
|
|
|
|
|
private static IntegerPropertyInvalidatedCache<Integer> sGetSlotIndexCache =
|
|
|
|
|
new IntegerPropertyInvalidatedCache<>(ISub::getSlotIndex,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
|
|
|
|
|
INVALID_SIM_SLOT_INDEX);
|
|
|
|
|
|
|
|
|
|
private static IntegerPropertyInvalidatedCache<Integer> sSubIdCache =
|
|
|
|
|
new IntegerPropertyInvalidatedCache<>(ISub::getSubId,
|
|
|
|
|
CACHE_KEY_SLOT_INDEX_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
private static IntegerPropertyInvalidatedCache<Integer> sGetSubIdCache =
|
|
|
|
|
new IntegerPropertyInvalidatedCache<>(ISub::getSubId,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
|
|
|
|
|
INVALID_SUBSCRIPTION_ID);
|
|
|
|
|
|
|
|
|
|
/** Cache depends on getDefaultSubId, so we use the defaultSubId cache key */
|
|
|
|
|
private static IntegerPropertyInvalidatedCache<Integer> sPhoneIdCache =
|
|
|
|
|
new IntegerPropertyInvalidatedCache<>(ISub::getPhoneId,
|
|
|
|
|
CACHE_KEY_DEFAULT_SUB_ID_PROPERTY,
|
|
|
|
|
INVALID_PHONE_INDEX);
|
|
|
|
|
|
|
|
|
|
private static IntegerPropertyInvalidatedCache<Integer> sGetPhoneIdCache =
|
|
|
|
|
new IntegerPropertyInvalidatedCache<>(ISub::getPhoneId,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY,
|
|
|
|
|
INVALID_PHONE_INDEX);
|
|
|
|
|
|
|
|
|
|
//TODO: Removed before U AOSP public release.
|
|
|
|
|
private static VoidPropertyInvalidatedCache<Boolean> sIsSubscriptionManagerServiceEnabled =
|
|
|
|
|
new VoidPropertyInvalidatedCache<>(ISub::isSubscriptionManagerServiceEnabled,
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_ENABLED_PROPERTY,
|
|
|
|
|
false);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Generates a content {@link Uri} used to receive updates on simInfo change
|
|
|
|
|
* on the given subscriptionId
|
|
|
|
|
@@ -1455,17 +1392,6 @@ public class SubscriptionManager {
|
|
|
|
|
mContext = context;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return {@code true} if the new subscription manager service is used. This is temporary and
|
|
|
|
|
* will be removed before Android 14 release.
|
|
|
|
|
*
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
//TODO: Removed before U AOSP public release.
|
|
|
|
|
public static boolean isSubscriptionManagerServiceEnabled() {
|
|
|
|
|
return sIsSubscriptionManagerServiceEnabled.query(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private NetworkPolicyManager getNetworkPolicyManager() {
|
|
|
|
|
return (NetworkPolicyManager) mContext
|
|
|
|
|
.getSystemService(Context.NETWORK_POLICY_SERVICE);
|
|
|
|
|
@@ -1520,7 +1446,7 @@ public class SubscriptionManager {
|
|
|
|
|
+ " listener=" + listener);
|
|
|
|
|
}
|
|
|
|
|
// We use the TelephonyRegistry as it runs in the system and thus is always
|
|
|
|
|
// available. Where as SubscriptionController could crash and not be available
|
|
|
|
|
// available.
|
|
|
|
|
TelephonyRegistryManager telephonyRegistryManager = (TelephonyRegistryManager)
|
|
|
|
|
mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
|
|
|
|
|
if (telephonyRegistryManager != null) {
|
|
|
|
|
@@ -1550,7 +1476,7 @@ public class SubscriptionManager {
|
|
|
|
|
+ " listener=" + listener);
|
|
|
|
|
}
|
|
|
|
|
// We use the TelephonyRegistry as it runs in the system and thus is always
|
|
|
|
|
// available where as SubscriptionController could crash and not be available
|
|
|
|
|
// available.
|
|
|
|
|
TelephonyRegistryManager telephonyRegistryManager = (TelephonyRegistryManager)
|
|
|
|
|
mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
|
|
|
|
|
if (telephonyRegistryManager != null) {
|
|
|
|
|
@@ -1608,7 +1534,7 @@ public class SubscriptionManager {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// We use the TelephonyRegistry as it runs in the system and thus is always
|
|
|
|
|
// available where as SubscriptionController could crash and not be available
|
|
|
|
|
// available.
|
|
|
|
|
TelephonyRegistryManager telephonyRegistryManager = (TelephonyRegistryManager)
|
|
|
|
|
mContext.getSystemService(Context.TELEPHONY_REGISTRY_SERVICE);
|
|
|
|
|
if (telephonyRegistryManager != null) {
|
|
|
|
|
@@ -2149,9 +2075,9 @@ public class SubscriptionManager {
|
|
|
|
|
Log.e(LOG_TAG, "[removeSubscriptionInfoRecord]- ISub service is null");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
int result = iSub.removeSubInfo(uniqueId, subscriptionType);
|
|
|
|
|
if (result < 0) {
|
|
|
|
|
Log.e(LOG_TAG, "Removal of subscription didn't succeed: error = " + result);
|
|
|
|
|
boolean result = iSub.removeSubInfo(uniqueId, subscriptionType);
|
|
|
|
|
if (!result) {
|
|
|
|
|
Log.e(LOG_TAG, "Removal of subscription didn't succeed");
|
|
|
|
|
} else {
|
|
|
|
|
logd("successfully removed subscription");
|
|
|
|
|
}
|
|
|
|
|
@@ -2236,8 +2162,7 @@ public class SubscriptionManager {
|
|
|
|
|
* subscriptionId doesn't have an associated slot index.
|
|
|
|
|
*/
|
|
|
|
|
public static int getSlotIndex(int subscriptionId) {
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) return sGetSlotIndexCache.query(subscriptionId);
|
|
|
|
|
return sSlotIndexCache.query(subscriptionId);
|
|
|
|
|
return sGetSlotIndexCache.query(subscriptionId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -2294,15 +2219,13 @@ public class SubscriptionManager {
|
|
|
|
|
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) return sGetSubIdCache.query(slotIndex);
|
|
|
|
|
return sSubIdCache.query(slotIndex);
|
|
|
|
|
return sGetSubIdCache.query(slotIndex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
|
|
|
|
|
public static int getPhoneId(int subId) {
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) return sGetPhoneIdCache.query(subId);
|
|
|
|
|
return sPhoneIdCache.query(subId);
|
|
|
|
|
return sGetPhoneIdCache.query(subId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void logd(String msg) {
|
|
|
|
|
@@ -2323,8 +2246,7 @@ public class SubscriptionManager {
|
|
|
|
|
* @return the "system" default subscription id.
|
|
|
|
|
*/
|
|
|
|
|
public static int getDefaultSubscriptionId() {
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) return sGetDefaultSubIdCache.query(null);
|
|
|
|
|
return sDefaultSubIdCache.query(null);
|
|
|
|
|
return sGetDefaultSubIdCache.query(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -2412,8 +2334,7 @@ public class SubscriptionManager {
|
|
|
|
|
* @return the default SMS subscription Id.
|
|
|
|
|
*/
|
|
|
|
|
public static int getDefaultSmsSubscriptionId() {
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) return sGetDefaultSmsSubIdCache.query(null);
|
|
|
|
|
return sDefaultSmsSubIdCache.query(null);
|
|
|
|
|
return sGetDefaultSmsSubIdCache.query(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -2447,8 +2368,7 @@ public class SubscriptionManager {
|
|
|
|
|
* @return the default data subscription Id.
|
|
|
|
|
*/
|
|
|
|
|
public static int getDefaultDataSubscriptionId() {
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) return sGetDefaultDataSubIdCache.query(null);
|
|
|
|
|
return sDefaultDataSubIdCache.query(null);
|
|
|
|
|
return sGetDefaultDataSubIdCache.query(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -3912,10 +3832,7 @@ public class SubscriptionManager {
|
|
|
|
|
* @see TelephonyCallback.ActiveDataSubscriptionIdListener
|
|
|
|
|
*/
|
|
|
|
|
public static int getActiveDataSubscriptionId() {
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) {
|
|
|
|
|
return sGetActiveDataSubscriptionIdCache.query(null);
|
|
|
|
|
}
|
|
|
|
|
return sActiveDataSubIdCache.query(null);
|
|
|
|
|
return sGetActiveDataSubscriptionIdCache.query(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -3933,62 +3850,17 @@ public class SubscriptionManager {
|
|
|
|
|
intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static void invalidateDefaultSubIdCaches() {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_SUB_ID_PROPERTY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static void invalidateDefaultDataSubIdCaches() {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static void invalidateDefaultSmsSubIdCaches() {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_SMS_SUB_ID_PROPERTY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static void invalidateActiveDataSubIdCaches() {
|
|
|
|
|
if (isSubscriptionManagerServiceEnabled()) {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY);
|
|
|
|
|
} else {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_ACTIVE_DATA_SUB_ID_PROPERTY);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static void invalidateSlotIndexCaches() {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_SLOT_INDEX_PROPERTY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
public static void invalidateSubscriptionManagerServiceCaches() {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_PROPERTY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** @hide */
|
|
|
|
|
//TODO: Removed before U AOSP public release.
|
|
|
|
|
public static void invalidateSubscriptionManagerServiceEnabledCaches() {
|
|
|
|
|
PropertyInvalidatedCache.invalidateCache(
|
|
|
|
|
CACHE_KEY_SUBSCRIPTION_MANAGER_SERVICE_ENABLED_PROPERTY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Allows a test process to disable client-side caching operations.
|
|
|
|
|
*
|
|
|
|
|
* @hide
|
|
|
|
|
*/
|
|
|
|
|
public static void disableCaching() {
|
|
|
|
|
sDefaultSubIdCache.disableLocal();
|
|
|
|
|
sDefaultDataSubIdCache.disableLocal();
|
|
|
|
|
sActiveDataSubIdCache.disableLocal();
|
|
|
|
|
sDefaultSmsSubIdCache.disableLocal();
|
|
|
|
|
sSlotIndexCache.disableLocal();
|
|
|
|
|
sSubIdCache.disableLocal();
|
|
|
|
|
sPhoneIdCache.disableLocal();
|
|
|
|
|
|
|
|
|
|
sGetDefaultSubIdCache.disableLocal();
|
|
|
|
|
sGetDefaultDataSubIdCache.disableLocal();
|
|
|
|
|
sGetActiveDataSubscriptionIdCache.disableLocal();
|
|
|
|
|
@@ -3996,8 +3868,6 @@ public class SubscriptionManager {
|
|
|
|
|
sGetSlotIndexCache.disableLocal();
|
|
|
|
|
sGetSubIdCache.disableLocal();
|
|
|
|
|
sGetPhoneIdCache.disableLocal();
|
|
|
|
|
|
|
|
|
|
sIsSubscriptionManagerServiceEnabled.disableLocal();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -4005,14 +3875,6 @@ public class SubscriptionManager {
|
|
|
|
|
*
|
|
|
|
|
* @hide */
|
|
|
|
|
public static void clearCaches() {
|
|
|
|
|
sDefaultSubIdCache.clear();
|
|
|
|
|
sDefaultDataSubIdCache.clear();
|
|
|
|
|
sActiveDataSubIdCache.clear();
|
|
|
|
|
sDefaultSmsSubIdCache.clear();
|
|
|
|
|
sSlotIndexCache.clear();
|
|
|
|
|
sSubIdCache.clear();
|
|
|
|
|
sPhoneIdCache.clear();
|
|
|
|
|
|
|
|
|
|
sGetDefaultSubIdCache.clear();
|
|
|
|
|
sGetDefaultDataSubIdCache.clear();
|
|
|
|
|
sGetActiveDataSubscriptionIdCache.clear();
|
|
|
|
|
@@ -4020,8 +3882,6 @@ public class SubscriptionManager {
|
|
|
|
|
sGetSlotIndexCache.clear();
|
|
|
|
|
sGetSubIdCache.clear();
|
|
|
|
|
sGetPhoneIdCache.clear();
|
|
|
|
|
|
|
|
|
|
sIsSubscriptionManagerServiceEnabled.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|