Merge "[Settings] Unable to display disabled SIM (part 2)"
diff --git a/src/com/android/settings/network/ActiveSubsciptionsListener.java b/src/com/android/settings/network/ActiveSubsciptionsListener.java
index d9d0bb5..3e4272d 100644
--- a/src/com/android/settings/network/ActiveSubsciptionsListener.java
+++ b/src/com/android/settings/network/ActiveSubsciptionsListener.java
@@ -25,6 +25,7 @@
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
@@ -39,9 +40,11 @@
* A listener for active subscription change
*/
public abstract class ActiveSubsciptionsListener
- extends SubscriptionManager.OnSubscriptionsChangedListener {
+ extends SubscriptionManager.OnSubscriptionsChangedListener
+ implements AutoCloseable {
private static final String TAG = "ActiveSubsciptions";
+ private static final boolean DEBUG = false;
/**
* Constructor
@@ -61,6 +64,8 @@
CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
mSubscriptionChangeIntentFilter.addAction(
TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
+ mSubscriptionChangeIntentFilter.addAction(
+ TelephonyManager.ACTION_MULTI_SIM_CONFIG_CHANGED);
}
@VisibleForTesting
@@ -135,6 +140,13 @@
}
/**
+ * Implementation of {@code AutoCloseable}
+ */
+ public void close() {
+ stop();
+ }
+
+ /**
* Get SubscriptionManager
*
* @return a SubscriptionManager
@@ -174,15 +186,17 @@
mCachedActiveSubscriptionInfo = getSubscriptionManager().getActiveSubscriptionInfoList();
mCacheState.compareAndSet(STATE_LISTENING, STATE_DATA_CACHED);
- if ((mCachedActiveSubscriptionInfo == null)
- || (mCachedActiveSubscriptionInfo.size() <= 0)) {
- Log.d(TAG, "active subscriptions: " + mCachedActiveSubscriptionInfo);
- } else {
- final StringBuilder logString = new StringBuilder("active subscriptions:");
- for (SubscriptionInfo subInfo : mCachedActiveSubscriptionInfo) {
- logString.append(" " + subInfo.getSubscriptionId());
+ if (DEBUG) {
+ if ((mCachedActiveSubscriptionInfo == null)
+ || (mCachedActiveSubscriptionInfo.size() <= 0)) {
+ Log.d(TAG, "active subscriptions: " + mCachedActiveSubscriptionInfo);
+ } else {
+ final StringBuilder logString = new StringBuilder("active subscriptions:");
+ for (SubscriptionInfo subInfo : mCachedActiveSubscriptionInfo) {
+ logString.append(" " + subInfo.getSubscriptionId());
+ }
+ Log.d(TAG, logString.toString());
}
- Log.d(TAG, logString.toString());
}
return mCachedActiveSubscriptionInfo;
@@ -208,12 +222,12 @@
}
/**
- * Get a list of accessible subscription info
+ * Get a list of all subscription info which accessible by Settings app
*
* @return A list of accessible subscription info
*/
public List<SubscriptionInfo> getAccessibleSubscriptionsInfo() {
- return getSubscriptionManager().getAccessibleSubscriptionInfoList();
+ return getSubscriptionManager().getAvailableSubscriptionInfoList();
}
/**
@@ -223,11 +237,12 @@
* @return A subscription info which is accessible list
*/
public SubscriptionInfo getAccessibleSubscriptionInfo(int subId) {
- if (mCacheState.get() >= STATE_DATA_CACHED) {
- final SubscriptionInfo activeSubInfo = getActiveSubscriptionInfo(subId);
- if (activeSubInfo != null) {
- return activeSubInfo;
- }
+ // Always check if subId is part of activeSubscriptions
+ // since there's cache design within SubscriptionManager.
+ // That give us a chance to avoid from querying ContentProvider.
+ final SubscriptionInfo activeSubInfo = getActiveSubscriptionInfo(subId);
+ if (activeSubInfo != null) {
+ return activeSubInfo;
}
final List<SubscriptionInfo> subInfoList = getAccessibleSubscriptionsInfo();
diff --git a/src/com/android/settings/network/ProxySubscriptionManager.java b/src/com/android/settings/network/ProxySubscriptionManager.java
index 8f3f385..b10c727 100644
--- a/src/com/android/settings/network/ProxySubscriptionManager.java
+++ b/src/com/android/settings/network/ProxySubscriptionManager.java
@@ -140,6 +140,7 @@
@OnLifecycleEvent(ON_DESTROY)
void onDestroy() {
+ mSubsciptionsMonitor.close();
mAirplaneModeMonitor.close();
if (mLifecycle != null) {
diff --git a/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java b/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java
index 7f23699..4c7b55b 100644
--- a/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java
+++ b/tests/robotests/src/com/android/settings/network/ActiveSubsciptionsListenerTest.java
@@ -101,7 +101,7 @@
@After
public void cleanUp() {
- mListener.stop();
+ mListener.close();
}
private class ActiveSubsciptionsListenerImpl extends ActiveSubsciptionsListener {