Fix creating ConnectivityUtil to work on any platform am: dcfe928ff3
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Messaging/+/1343457
Change-Id: Id737b6239df8b85888e7832ab6f5e157be94de1f
diff --git a/src/com/android/messaging/datamodel/DataModelImpl.java b/src/com/android/messaging/datamodel/DataModelImpl.java
index 106bfba..5d2217d 100644
--- a/src/com/android/messaging/datamodel/DataModelImpl.java
+++ b/src/com/android/messaging/datamodel/DataModelImpl.java
@@ -66,11 +66,11 @@
private final DatabaseHelper mDatabaseHelper;
private final SyncManager mSyncManager;
- // Cached ConnectivityUtil instance for Pre-L_MR1
- private static ConnectivityUtil sConnectivityUtilInstanceCachePreLMR1 = null;
- // Cached ConnectivityUtil subId->instance for L_MR1 and beyond
+ // Cached ConnectivityUtil instance for Pre-N.
+ private static ConnectivityUtil sConnectivityUtilInstanceCachePreN = null;
+ // Cached ConnectivityUtil subId->instance for N and beyond
private static final ConcurrentHashMap<Integer, ConnectivityUtil>
- sConnectivityUtilInstanceCacheLMR1 = new ConcurrentHashMap<>();
+ sConnectivityUtilInstanceCacheN = new ConcurrentHashMap<>();
public DataModelImpl(final Context context) {
super();
@@ -79,10 +79,10 @@
mDataModelWorker = new BackgroundWorker();
mDatabaseHelper = DatabaseHelper.getInstance(context);
mSyncManager = new SyncManager();
- if (OsUtil.isAtLeastL_MR1()) {
- createConnectivityUtilForLMR1();
+ if (OsUtil.isAtLeastN()) {
+ createConnectivityUtilForEachActiveSubscription();
} else {
- sConnectivityUtilInstanceCachePreLMR1 = new ConnectivityUtil(context);
+ sConnectivityUtilInstanceCachePreN = new ConnectivityUtil(context);
}
}
@@ -236,13 +236,15 @@
// gracefully
MmsConfig.loadAsync();
ParticipantRefresh.refreshSelfParticipants();
- createConnectivityUtilForLMR1();
+ if (OsUtil.isAtLeastN()) {
+ createConnectivityUtilForEachActiveSubscription();
+ }
}
});
}
}
- private void createConnectivityUtilForLMR1() {
+ private void createConnectivityUtilForEachActiveSubscription() {
PhoneUtils.forEachActiveSubscription(new PhoneUtils.SubscriptionRunnable() {
@Override
public void runForSubscription(int subId) {
@@ -250,20 +252,17 @@
if (subId <= ParticipantData.DEFAULT_SELF_SUB_ID) {
subId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
}
-
- if (!sConnectivityUtilInstanceCacheLMR1.containsKey(subId)) {
- sConnectivityUtilInstanceCacheLMR1.put(
- subId, new ConnectivityUtil(mContext, subId));
- }
+ sConnectivityUtilInstanceCacheN.computeIfAbsent(
+ subId, key -> new ConnectivityUtil(mContext, key));
}
});
}
public static ConnectivityUtil getConnectivityUtil(final int subId) {
- if (OsUtil.isAtLeastL_MR1()) {
- return sConnectivityUtilInstanceCacheLMR1.get(subId);
+ if (OsUtil.isAtLeastN()) {
+ return sConnectivityUtilInstanceCacheN.get(subId);
} else {
- return sConnectivityUtilInstanceCachePreLMR1;
+ return sConnectivityUtilInstanceCachePreN;
}
}
}
diff --git a/src/com/android/messaging/util/ConnectivityUtil.java b/src/com/android/messaging/util/ConnectivityUtil.java
index 0229607..a7467e4 100644
--- a/src/com/android/messaging/util/ConnectivityUtil.java
+++ b/src/com/android/messaging/util/ConnectivityUtil.java
@@ -23,6 +23,16 @@
import com.android.messaging.datamodel.data.ParticipantData;
+/**
+ * ConnectivityUtil listens to the network service state changes.
+ *
+ * On N and beyond, This class instance can be created via ConnectivityUtil(context, subId), use
+ * ConnectivityUtil(context) for others.
+ *
+ * Note that TelephonyManager has createForSubscriptionId() for a specific subId from N but listen()
+ * does not use the subId on the manager, and uses the default subId on PhoneStateListener. From O,
+ * the manager uses its' own subId in listen().
+ */
public class ConnectivityUtil {
// Assume not connected until informed differently
private volatile int mCurrentServiceState = ServiceState.STATE_POWER_OFF;
@@ -40,6 +50,7 @@
}
public ConnectivityUtil(final Context context, final int subId) {
+ Assert.isTrue(OsUtil.isAtLeastN());
mTelephonyManager =
((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
.createForSubscriptionId(subId);