The provider model slice carrier toggle is broke.
The slice doesn't upload subId for TelephonyManager and the listeners. Bug: 177385874 Test: (PASS)atest NetworkProviderWorkerTest (PASS)atest ProviderModelSliceTest (PASS)atest ProviderModelSliceHelperTest Change-Id: Icc8a7793204de2e2eadd0454edf50e466821b8f9
This commit is contained in:
@@ -115,6 +115,7 @@ public class ProviderModelSlice extends WifiSlice {
|
|||||||
|
|
||||||
// Second section: Add a carrier item.
|
// Second section: Add a carrier item.
|
||||||
if (hasCarrier) {
|
if (hasCarrier) {
|
||||||
|
mHelper.updateTelephony();
|
||||||
listBuilder.addRow(mHelper.createCarrierRow());
|
listBuilder.addRow(mHelper.createCarrierRow());
|
||||||
maxListSize--;
|
maxListSize--;
|
||||||
}
|
}
|
||||||
@@ -141,7 +142,7 @@ public class ProviderModelSlice extends WifiSlice {
|
|||||||
if (worker == null || wifiList == null) {
|
if (worker == null || wifiList == null) {
|
||||||
log("wifiList is null");
|
log("wifiList is null");
|
||||||
int resId = R.string.non_carrier_network_unavailable;
|
int resId = R.string.non_carrier_network_unavailable;
|
||||||
if (!hasCarrier || mHelper.isNoCarrierData()) {
|
if (!hasCarrier || !mHelper.isDataSimActive()) {
|
||||||
log("No carrier item or no carrier data.");
|
log("No carrier item or no carrier data.");
|
||||||
resId = R.string.all_network_unavailable;
|
resId = R.string.all_network_unavailable;
|
||||||
}
|
}
|
||||||
|
@@ -63,7 +63,7 @@ import java.util.stream.Collectors;
|
|||||||
public class ProviderModelSliceHelper {
|
public class ProviderModelSliceHelper {
|
||||||
private static final String TAG = "ProviderModelSlice";
|
private static final String TAG = "ProviderModelSlice";
|
||||||
private final SubscriptionManager mSubscriptionManager;
|
private final SubscriptionManager mSubscriptionManager;
|
||||||
private final TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
protected final Context mContext;
|
protected final Context mContext;
|
||||||
private CustomSliceable mSliceable;
|
private CustomSliceable mSliceable;
|
||||||
|
|
||||||
@@ -277,4 +277,16 @@ public class ProviderModelSliceHelper {
|
|||||||
.map(String::trim)
|
.map(String::trim)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To update the telephony with subid.
|
||||||
|
*/
|
||||||
|
public void updateTelephony() {
|
||||||
|
if (mSubscriptionManager == null || mSubscriptionManager.getDefaultDataSubscriptionId()
|
||||||
|
== mSubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mTelephonyManager = mTelephonyManager.createForSubscriptionId(
|
||||||
|
mSubscriptionManager.getDefaultDataSubscriptionId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,6 @@ import android.os.Handler;
|
|||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
import android.telephony.ServiceState;
|
import android.telephony.ServiceState;
|
||||||
import android.telephony.SubscriptionInfo;
|
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyDisplayInfo;
|
import android.telephony.TelephonyDisplayInfo;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
@@ -54,12 +53,11 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
private SubscriptionsChangeListener mSubscriptionsListener;
|
private SubscriptionsChangeListener mSubscriptionsListener;
|
||||||
private MobileDataEnabledListener mDataEnabledListener;
|
private MobileDataEnabledListener mDataEnabledListener;
|
||||||
private DataConnectivityListener mConnectivityListener;
|
private DataConnectivityListener mConnectivityListener;
|
||||||
|
private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final PhoneStateListener mPhoneStateListener;
|
final PhoneStateListener mPhoneStateListener;
|
||||||
private final SubscriptionManager mSubscriptionManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
private final TelephonyManager mTelephonyManager;
|
|
||||||
|
|
||||||
public NetworkProviderWorker(Context context, Uri uri) {
|
public NetworkProviderWorker(Context context, Uri uri) {
|
||||||
super(context, uri);
|
super(context, uri);
|
||||||
@@ -68,9 +66,10 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
mMobileDataObserver = new DataContentObserver(handler, this);
|
mMobileDataObserver = new DataContentObserver(handler, this);
|
||||||
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
|
mDefaultDataSubid = getDefaultDataSubscriptionId();
|
||||||
mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
|
|
||||||
|
|
||||||
|
mTelephonyManager = mContext.getSystemService(
|
||||||
|
TelephonyManager.class).createForSubscriptionId(mDefaultDataSubid);
|
||||||
mPhoneStateListener = new NetworkProviderPhoneStateListener(handler::post);
|
mPhoneStateListener = new NetworkProviderPhoneStateListener(handler::post);
|
||||||
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
|
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
|
||||||
mDataEnabledListener = new MobileDataEnabledListener(context, this);
|
mDataEnabledListener = new MobileDataEnabledListener(context, this);
|
||||||
@@ -80,15 +79,12 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSlicePinned() {
|
protected void onSlicePinned() {
|
||||||
mMobileDataObserver.register(mContext,
|
mMobileDataObserver.register(mContext, mDefaultDataSubid);
|
||||||
getDefaultSubscriptionId(mSubscriptionManager));
|
|
||||||
|
|
||||||
mSubscriptionsListener.start();
|
mSubscriptionsListener.start();
|
||||||
mDataEnabledListener.start(SubscriptionManager.getDefaultDataSubscriptionId());
|
mDataEnabledListener.start(mDefaultDataSubid);
|
||||||
mConnectivityListener.start();
|
mConnectivityListener.start();
|
||||||
mSignalStrengthListener.resume();
|
mSignalStrengthListener.resume();
|
||||||
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
|
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
|
||||||
| PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE
|
|
||||||
| PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
|
| PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
|
||||||
|
|
||||||
super.onSlicePinned();
|
super.onSlicePinned();
|
||||||
@@ -125,15 +121,22 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSubscriptionsChanged() {
|
public void onSubscriptionsChanged() {
|
||||||
int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId();
|
int defaultDataSubId = getDefaultDataSubscriptionId();
|
||||||
Log.d(TAG, "onSubscriptionsChanged: defaultDataSubId:" + defaultDataSubId);
|
Log.d(TAG, "onSubscriptionsChanged: defaultDataSubId:" + defaultDataSubId);
|
||||||
|
if (mDefaultDataSubid == defaultDataSubId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)) {
|
||||||
|
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
|
||||||
|
mMobileDataObserver.unregister(mContext);
|
||||||
|
|
||||||
mSignalStrengthListener.updateSubscriptionIds(
|
mSignalStrengthListener.updateSubscriptionIds(Collections.singleton(defaultDataSubId));
|
||||||
SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)
|
mTelephonyManager = mTelephonyManager.createForSubscriptionId(defaultDataSubId);
|
||||||
? Collections.singleton(defaultDataSubId) : Collections.emptySet());
|
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
|
||||||
if (defaultDataSubId != mDataEnabledListener.getSubId()) {
|
| PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
|
||||||
mDataEnabledListener.stop();
|
mMobileDataObserver.register(mContext, mDefaultDataSubid);
|
||||||
mDataEnabledListener.start(defaultDataSubId);
|
} else {
|
||||||
|
mSignalStrengthListener.updateSubscriptionIds(Collections.emptySet());
|
||||||
}
|
}
|
||||||
updateSlice();
|
updateSlice();
|
||||||
}
|
}
|
||||||
@@ -180,6 +183,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* To register the observer for mobile data changed.
|
* To register the observer for mobile data changed.
|
||||||
|
*
|
||||||
* @param context the Context object.
|
* @param context the Context object.
|
||||||
* @param subId the default data subscription id.
|
* @param subId the default data subscription id.
|
||||||
*/
|
*/
|
||||||
@@ -190,6 +194,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* To unregister the observer for mobile data changed.
|
* To unregister the observer for mobile data changed.
|
||||||
|
*
|
||||||
* @param context the Context object.
|
* @param context the Context object.
|
||||||
*/
|
*/
|
||||||
public void unregister(Context context) {
|
public void unregister(Context context) {
|
||||||
@@ -209,12 +214,6 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
updateSlice();
|
updateSlice();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActiveDataSubscriptionIdChanged(int subId) {
|
|
||||||
Log.d(TAG, "onActiveDataSubscriptionIdChanged: subId=" + subId);
|
|
||||||
updateSlice();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
|
public void onDisplayInfoChanged(TelephonyDisplayInfo telephonyDisplayInfo) {
|
||||||
Log.d(TAG, "onDisplayInfoChanged: telephonyDisplayInfo=" + telephonyDisplayInfo);
|
Log.d(TAG, "onDisplayInfoChanged: telephonyDisplayInfo=" + telephonyDisplayInfo);
|
||||||
@@ -222,13 +221,8 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static int getDefaultSubscriptionId(SubscriptionManager subscriptionManager) {
|
@VisibleForTesting
|
||||||
final SubscriptionInfo defaultSubscription = subscriptionManager.getActiveSubscriptionInfo(
|
int getDefaultDataSubscriptionId() {
|
||||||
subscriptionManager.getDefaultDataSubscriptionId());
|
return SubscriptionManager.getDefaultDataSubscriptionId();
|
||||||
|
|
||||||
if (defaultSubscription == null) {
|
|
||||||
return SubscriptionManager.INVALID_SUBSCRIPTION_ID; // No default subscription
|
|
||||||
}
|
|
||||||
return defaultSubscription.getSubscriptionId();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -178,7 +178,7 @@ public class ProviderModelSliceTest {
|
|||||||
public void getSlice_noWifiAndHasCarrierNoData_oneCarrierOneGridRowWithAllNetworkUnavailable() {
|
public void getSlice_noWifiAndHasCarrierNoData_oneCarrierOneGridRowWithAllNetworkUnavailable() {
|
||||||
mWifiList.clear();
|
mWifiList.clear();
|
||||||
mMockNetworkProviderWorker.updateSelfResults(null);
|
mMockNetworkProviderWorker.updateSelfResults(null);
|
||||||
mockHelperCondition(false, true, true, null);
|
mockHelperCondition(false, true, false, null);
|
||||||
|
|
||||||
final Slice slice = mMockProviderModelSlice.getSlice();
|
final Slice slice = mMockProviderModelSlice.getSlice();
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ public class ProviderModelSliceTest {
|
|||||||
public void getSlice_noWifiAndNoCarrier_oneCarrierOneGridRowWithNonCarrierNetworkUnavailable() {
|
public void getSlice_noWifiAndNoCarrier_oneCarrierOneGridRowWithNonCarrierNetworkUnavailable() {
|
||||||
mWifiList.clear();
|
mWifiList.clear();
|
||||||
mMockProviderModelSlice = new MockProviderModelSlice(mContext, null);
|
mMockProviderModelSlice = new MockProviderModelSlice(mContext, null);
|
||||||
mockHelperCondition(false, true, false, null);
|
mockHelperCondition(false, true, true, null);
|
||||||
|
|
||||||
final Slice slice = mMockProviderModelSlice.getSlice();
|
final Slice slice = mMockProviderModelSlice.getSlice();
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ public class ProviderModelSliceTest {
|
|||||||
WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi2_key", true);
|
WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi2_key", true);
|
||||||
mWifiList.add(mMockWifiSliceItem2);
|
mWifiList.add(mMockWifiSliceItem2);
|
||||||
mMockNetworkProviderWorker.updateSelfResults(mWifiList);
|
mMockNetworkProviderWorker.updateSelfResults(mWifiList);
|
||||||
mockHelperCondition(false, true, false, mWifiList.get(0));
|
mockHelperCondition(false, true, true, mWifiList.get(0));
|
||||||
|
|
||||||
final Slice slice = mMockProviderModelSlice.getSlice();
|
final Slice slice = mMockProviderModelSlice.getSlice();
|
||||||
|
|
||||||
@@ -268,10 +268,10 @@ public class ProviderModelSliceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void mockHelperCondition(boolean airplaneMode, boolean hasCarrier,
|
private void mockHelperCondition(boolean airplaneMode, boolean hasCarrier,
|
||||||
boolean isNoCarrierData, WifiSliceItem connectedWifiItem) {
|
boolean isDataSimActive, WifiSliceItem connectedWifiItem) {
|
||||||
when(mProviderModelSliceHelper.isAirplaneModeEnabled()).thenReturn(airplaneMode);
|
when(mProviderModelSliceHelper.isAirplaneModeEnabled()).thenReturn(airplaneMode);
|
||||||
when(mProviderModelSliceHelper.hasCarrier()).thenReturn(hasCarrier);
|
when(mProviderModelSliceHelper.hasCarrier()).thenReturn(hasCarrier);
|
||||||
when(mProviderModelSliceHelper.isNoCarrierData()).thenReturn(isNoCarrierData);
|
when(mProviderModelSliceHelper.isDataSimActive()).thenReturn(isDataSimActive);
|
||||||
when(mProviderModelSliceHelper.getConnectedWifiItem(any())).thenReturn(connectedWifiItem);
|
when(mProviderModelSliceHelper.getConnectedWifiItem(any())).thenReturn(connectedWifiItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -69,7 +69,6 @@ public class NetworkProviderWorkerTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||||
|
|
||||||
when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
|
|
||||||
when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
|
when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
|
||||||
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
|
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
|
||||||
when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
|
when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
|
||||||
@@ -141,6 +140,7 @@ public class NetworkProviderWorkerTest {
|
|||||||
public void onSubscriptionsChanged_notifySubscriptionChanged_callUpdateSlice() {
|
public void onSubscriptionsChanged_notifySubscriptionChanged_callUpdateSlice() {
|
||||||
mMockNetworkProviderWorker.onSlicePinned();
|
mMockNetworkProviderWorker.onSlicePinned();
|
||||||
mMockNetworkProviderWorker.receiveNotification(false);
|
mMockNetworkProviderWorker.receiveNotification(false);
|
||||||
|
mMockNetworkProviderWorker.setDefaultDataSubscriptionId(2);
|
||||||
|
|
||||||
mMockNetworkProviderWorker.onSubscriptionsChanged();
|
mMockNetworkProviderWorker.onSubscriptionsChanged();
|
||||||
|
|
||||||
@@ -213,17 +213,6 @@ public class NetworkProviderWorkerTest {
|
|||||||
assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
|
assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@UiThreadTest
|
|
||||||
public void onActiveDataSubscriptionIdChanged_notifyPhoneStateListener_callUpdateSlice() {
|
|
||||||
mMockNetworkProviderWorker.onSlicePinned();
|
|
||||||
mMockNetworkProviderWorker.receiveNotification(false);
|
|
||||||
|
|
||||||
mMockNetworkProviderWorker.mPhoneStateListener.onActiveDataSubscriptionIdChanged(1);
|
|
||||||
|
|
||||||
assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@UiThreadTest
|
@UiThreadTest
|
||||||
public void onDisplayInfoChanged_notifyPhoneStateListener_callUpdateSlice() {
|
public void onDisplayInfoChanged_notifyPhoneStateListener_callUpdateSlice() {
|
||||||
@@ -238,7 +227,7 @@ public class NetworkProviderWorkerTest {
|
|||||||
|
|
||||||
public class MockNetworkProviderWorker extends NetworkProviderWorker {
|
public class MockNetworkProviderWorker extends NetworkProviderWorker {
|
||||||
private boolean mHasNotification = false;
|
private boolean mHasNotification = false;
|
||||||
|
private int mDefaultDataSubId = 1;
|
||||||
MockNetworkProviderWorker(Context context, Uri uri) {
|
MockNetworkProviderWorker(Context context, Uri uri) {
|
||||||
super(context, uri);
|
super(context, uri);
|
||||||
}
|
}
|
||||||
@@ -260,5 +249,14 @@ public class NetworkProviderWorkerTest {
|
|||||||
public void setWifiPickerTracker(WifiPickerTracker wifiPickerTracker) {
|
public void setWifiPickerTracker(WifiPickerTracker wifiPickerTracker) {
|
||||||
mWifiPickerTracker = wifiPickerTracker;
|
mWifiPickerTracker = wifiPickerTracker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getDefaultDataSubscriptionId() {
|
||||||
|
return mDefaultDataSubId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultDataSubscriptionId(int defaultDataSubId) {
|
||||||
|
mDefaultDataSubId = defaultDataSubId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user