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:
SongFerngWang
2021-01-13 22:11:49 +08:00
parent 88ffca9af9
commit f3b25cc7cb
5 changed files with 57 additions and 52 deletions

View File

@@ -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;
} }

View File

@@ -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());
}
} }

View File

@@ -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();
} }
} }

View File

@@ -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);
} }

View File

@@ -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;
}
} }
} }