Fix creating ConnectivityUtil to work on any platform am: dcfe928ff3 am: 86314ff8e6 am: d810c8b49e am: d5a77b3938
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Messaging/+/1343457 Change-Id: I4801c9d21ff246d6de3f16842ed3caa4421dc2ca
This commit is contained in:
@@ -66,11 +66,11 @@ public class DataModelImpl extends DataModel {
|
|||||||
private final DatabaseHelper mDatabaseHelper;
|
private final DatabaseHelper mDatabaseHelper;
|
||||||
private final SyncManager mSyncManager;
|
private final SyncManager mSyncManager;
|
||||||
|
|
||||||
// Cached ConnectivityUtil instance for Pre-L_MR1
|
// Cached ConnectivityUtil instance for Pre-N.
|
||||||
private static ConnectivityUtil sConnectivityUtilInstanceCachePreLMR1 = null;
|
private static ConnectivityUtil sConnectivityUtilInstanceCachePreN = null;
|
||||||
// Cached ConnectivityUtil subId->instance for L_MR1 and beyond
|
// Cached ConnectivityUtil subId->instance for N and beyond
|
||||||
private static final ConcurrentHashMap<Integer, ConnectivityUtil>
|
private static final ConcurrentHashMap<Integer, ConnectivityUtil>
|
||||||
sConnectivityUtilInstanceCacheLMR1 = new ConcurrentHashMap<>();
|
sConnectivityUtilInstanceCacheN = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public DataModelImpl(final Context context) {
|
public DataModelImpl(final Context context) {
|
||||||
super();
|
super();
|
||||||
@@ -79,10 +79,10 @@ public class DataModelImpl extends DataModel {
|
|||||||
mDataModelWorker = new BackgroundWorker();
|
mDataModelWorker = new BackgroundWorker();
|
||||||
mDatabaseHelper = DatabaseHelper.getInstance(context);
|
mDatabaseHelper = DatabaseHelper.getInstance(context);
|
||||||
mSyncManager = new SyncManager();
|
mSyncManager = new SyncManager();
|
||||||
if (OsUtil.isAtLeastL_MR1()) {
|
if (OsUtil.isAtLeastN()) {
|
||||||
createConnectivityUtilForLMR1();
|
createConnectivityUtilForEachActiveSubscription();
|
||||||
} else {
|
} else {
|
||||||
sConnectivityUtilInstanceCachePreLMR1 = new ConnectivityUtil(context);
|
sConnectivityUtilInstanceCachePreN = new ConnectivityUtil(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,13 +236,15 @@ public class DataModelImpl extends DataModel {
|
|||||||
// gracefully
|
// gracefully
|
||||||
MmsConfig.loadAsync();
|
MmsConfig.loadAsync();
|
||||||
ParticipantRefresh.refreshSelfParticipants();
|
ParticipantRefresh.refreshSelfParticipants();
|
||||||
createConnectivityUtilForLMR1();
|
if (OsUtil.isAtLeastN()) {
|
||||||
|
createConnectivityUtilForEachActiveSubscription();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createConnectivityUtilForLMR1() {
|
private void createConnectivityUtilForEachActiveSubscription() {
|
||||||
PhoneUtils.forEachActiveSubscription(new PhoneUtils.SubscriptionRunnable() {
|
PhoneUtils.forEachActiveSubscription(new PhoneUtils.SubscriptionRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public void runForSubscription(int subId) {
|
public void runForSubscription(int subId) {
|
||||||
@@ -250,20 +252,17 @@ public class DataModelImpl extends DataModel {
|
|||||||
if (subId <= ParticipantData.DEFAULT_SELF_SUB_ID) {
|
if (subId <= ParticipantData.DEFAULT_SELF_SUB_ID) {
|
||||||
subId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
|
subId = PhoneUtils.getDefault().getDefaultSmsSubscriptionId();
|
||||||
}
|
}
|
||||||
|
sConnectivityUtilInstanceCacheN.computeIfAbsent(
|
||||||
if (!sConnectivityUtilInstanceCacheLMR1.containsKey(subId)) {
|
subId, key -> new ConnectivityUtil(mContext, key));
|
||||||
sConnectivityUtilInstanceCacheLMR1.put(
|
|
||||||
subId, new ConnectivityUtil(mContext, subId));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ConnectivityUtil getConnectivityUtil(final int subId) {
|
public static ConnectivityUtil getConnectivityUtil(final int subId) {
|
||||||
if (OsUtil.isAtLeastL_MR1()) {
|
if (OsUtil.isAtLeastN()) {
|
||||||
return sConnectivityUtilInstanceCacheLMR1.get(subId);
|
return sConnectivityUtilInstanceCacheN.get(subId);
|
||||||
} else {
|
} else {
|
||||||
return sConnectivityUtilInstanceCachePreLMR1;
|
return sConnectivityUtilInstanceCachePreN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,16 @@ import android.telephony.TelephonyManager;
|
|||||||
|
|
||||||
import com.android.messaging.datamodel.data.ParticipantData;
|
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 {
|
public class ConnectivityUtil {
|
||||||
// Assume not connected until informed differently
|
// Assume not connected until informed differently
|
||||||
private volatile int mCurrentServiceState = ServiceState.STATE_POWER_OFF;
|
private volatile int mCurrentServiceState = ServiceState.STATE_POWER_OFF;
|
||||||
@@ -40,6 +50,7 @@ public class ConnectivityUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ConnectivityUtil(final Context context, final int subId) {
|
public ConnectivityUtil(final Context context, final int subId) {
|
||||||
|
Assert.isTrue(OsUtil.isAtLeastN());
|
||||||
mTelephonyManager =
|
mTelephonyManager =
|
||||||
((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
|
((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE))
|
||||||
.createForSubscriptionId(subId);
|
.createForSubscriptionId(subId);
|
||||||
|
|||||||
Reference in New Issue
Block a user