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,6 +186,7 @@ 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 (DEBUG) {
if ((mCachedActiveSubscriptionInfo == null) if ((mCachedActiveSubscriptionInfo == null)
|| (mCachedActiveSubscriptionInfo.size() <= 0)) { || (mCachedActiveSubscriptionInfo.size() <= 0)) {
Log.d(TAG, "active subscriptions: " + mCachedActiveSubscriptionInfo); Log.d(TAG, "active subscriptions: " + mCachedActiveSubscriptionInfo);
@@ -184,6 +197,7 @@ public abstract class ActiveSubsciptionsListener
} }
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,12 +237,13 @@ 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
// since there's cache design within SubscriptionManager.
// That give us a chance to avoid from querying ContentProvider.
final SubscriptionInfo activeSubInfo = getActiveSubscriptionInfo(subId); final SubscriptionInfo activeSubInfo = getActiveSubscriptionInfo(subId);
if (activeSubInfo != null) { if (activeSubInfo != null) {
return activeSubInfo; return activeSubInfo;
} }
}
final List<SubscriptionInfo> subInfoList = getAccessibleSubscriptionsInfo(); final List<SubscriptionInfo> subInfoList = getAccessibleSubscriptionsInfo();
if (subInfoList == null) { if (subInfoList == null) {

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 {