Merge "[Settings] Unable to display disabled SIM (part 2)"

This commit is contained in:
Bonian Chen
2019-12-16 08:05:17 +00:00
committed by Android (Google) Code Review
3 changed files with 33 additions and 17 deletions

View File

@@ -25,6 +25,7 @@ import android.os.Looper;
import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@@ -39,9 +40,11 @@ import java.util.concurrent.atomic.AtomicInteger;
* A listener for active subscription change * A listener for active subscription change
*/ */
public abstract class ActiveSubsciptionsListener public abstract class ActiveSubsciptionsListener
extends SubscriptionManager.OnSubscriptionsChangedListener { extends SubscriptionManager.OnSubscriptionsChangedListener
implements AutoCloseable {
private static final String TAG = "ActiveSubsciptions"; private static final String TAG = "ActiveSubsciptions";
private static final boolean DEBUG = false;
/** /**
* Constructor * Constructor
@@ -61,6 +64,8 @@ public abstract class ActiveSubsciptionsListener
CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
mSubscriptionChangeIntentFilter.addAction( mSubscriptionChangeIntentFilter.addAction(
TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED); TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
mSubscriptionChangeIntentFilter.addAction(
TelephonyManager.ACTION_MULTI_SIM_CONFIG_CHANGED);
} }
@VisibleForTesting @VisibleForTesting
@@ -134,6 +139,13 @@ public abstract class ActiveSubsciptionsListener
monitorSubscriptionsChange(false); monitorSubscriptionsChange(false);
} }
/**
* Implementation of {@code AutoCloseable}
*/
public void close() {
stop();
}
/** /**
* Get SubscriptionManager * Get SubscriptionManager
* *
@@ -174,15 +186,17 @@ public abstract class ActiveSubsciptionsListener
mCachedActiveSubscriptionInfo = getSubscriptionManager().getActiveSubscriptionInfoList(); mCachedActiveSubscriptionInfo = getSubscriptionManager().getActiveSubscriptionInfoList();
mCacheState.compareAndSet(STATE_LISTENING, STATE_DATA_CACHED); mCacheState.compareAndSet(STATE_LISTENING, STATE_DATA_CACHED);
if ((mCachedActiveSubscriptionInfo == null) if (DEBUG) {
|| (mCachedActiveSubscriptionInfo.size() <= 0)) { if ((mCachedActiveSubscriptionInfo == null)
Log.d(TAG, "active subscriptions: " + mCachedActiveSubscriptionInfo); || (mCachedActiveSubscriptionInfo.size() <= 0)) {
} else { Log.d(TAG, "active subscriptions: " + mCachedActiveSubscriptionInfo);
final StringBuilder logString = new StringBuilder("active subscriptions:"); } else {
for (SubscriptionInfo subInfo : mCachedActiveSubscriptionInfo) { final StringBuilder logString = new StringBuilder("active subscriptions:");
logString.append(" " + subInfo.getSubscriptionId()); for (SubscriptionInfo subInfo : mCachedActiveSubscriptionInfo) {
logString.append(" " + subInfo.getSubscriptionId());
}
Log.d(TAG, logString.toString());
} }
Log.d(TAG, logString.toString());
} }
return mCachedActiveSubscriptionInfo; return mCachedActiveSubscriptionInfo;
@@ -208,12 +222,12 @@ public abstract class ActiveSubsciptionsListener
} }
/** /**
* 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 * @return A list of accessible subscription info
*/ */
public List<SubscriptionInfo> getAccessibleSubscriptionsInfo() { public List<SubscriptionInfo> getAccessibleSubscriptionsInfo() {
return getSubscriptionManager().getAccessibleSubscriptionInfoList(); return getSubscriptionManager().getAvailableSubscriptionInfoList();
} }
/** /**
@@ -223,11 +237,12 @@ public abstract class ActiveSubsciptionsListener
* @return A subscription info which is accessible list * @return A subscription info which is accessible list
*/ */
public SubscriptionInfo getAccessibleSubscriptionInfo(int subId) { public SubscriptionInfo getAccessibleSubscriptionInfo(int subId) {
if (mCacheState.get() >= STATE_DATA_CACHED) { // Always check if subId is part of activeSubscriptions
final SubscriptionInfo activeSubInfo = getActiveSubscriptionInfo(subId); // since there's cache design within SubscriptionManager.
if (activeSubInfo != null) { // That give us a chance to avoid from querying ContentProvider.
return activeSubInfo; final SubscriptionInfo activeSubInfo = getActiveSubscriptionInfo(subId);
} if (activeSubInfo != null) {
return activeSubInfo;
} }
final List<SubscriptionInfo> subInfoList = getAccessibleSubscriptionsInfo(); final List<SubscriptionInfo> subInfoList = getAccessibleSubscriptionsInfo();

View File

@@ -140,6 +140,7 @@ public class ProxySubscriptionManager implements LifecycleObserver {
@OnLifecycleEvent(ON_DESTROY) @OnLifecycleEvent(ON_DESTROY)
void onDestroy() { void onDestroy() {
mSubsciptionsMonitor.close();
mAirplaneModeMonitor.close(); mAirplaneModeMonitor.close();
if (mLifecycle != null) { if (mLifecycle != null) {

View File

@@ -101,7 +101,7 @@ public class ActiveSubsciptionsListenerTest {
@After @After
public void cleanUp() { public void cleanUp() {
mListener.stop(); mListener.close();
} }
private class ActiveSubsciptionsListenerImpl extends ActiveSubsciptionsListener { private class ActiveSubsciptionsListenerImpl extends ActiveSubsciptionsListener {