Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3b25cc7 authored by SongFerngWang's avatar SongFerngWang
Browse files

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
parent 88ffca9a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -115,6 +115,7 @@ public class ProviderModelSlice extends WifiSlice {

        // Second section:  Add a carrier item.
        if (hasCarrier) {
            mHelper.updateTelephony();
            listBuilder.addRow(mHelper.createCarrierRow());
            maxListSize--;
        }
@@ -141,7 +142,7 @@ public class ProviderModelSlice extends WifiSlice {
        if (worker == null || wifiList == null) {
            log("wifiList is null");
            int resId = R.string.non_carrier_network_unavailable;
            if (!hasCarrier || mHelper.isNoCarrierData()) {
            if (!hasCarrier || !mHelper.isDataSimActive()) {
                log("No carrier item or no carrier data.");
                resId = R.string.all_network_unavailable;
            }
+13 −1
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ import java.util.stream.Collectors;
public class ProviderModelSliceHelper {
    private static final String TAG = "ProviderModelSlice";
    private final SubscriptionManager mSubscriptionManager;
    private final TelephonyManager mTelephonyManager;
    private TelephonyManager mTelephonyManager;
    protected final Context mContext;
    private CustomSliceable mSliceable;

@@ -277,4 +277,16 @@ public class ProviderModelSliceHelper {
                .map(String::trim)
                .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());
    }
}
+27 −33
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import android.os.Handler;
import android.os.Looper;
import android.telephony.PhoneStateListener;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyDisplayInfo;
import android.telephony.TelephonyManager;
@@ -54,12 +53,11 @@ public class NetworkProviderWorker extends WifiScanWorker implements
    private SubscriptionsChangeListener mSubscriptionsListener;
    private MobileDataEnabledListener mDataEnabledListener;
    private DataConnectivityListener mConnectivityListener;

    private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private final Context mContext;
    @VisibleForTesting
    final PhoneStateListener mPhoneStateListener;
    private final SubscriptionManager mSubscriptionManager;
    private final TelephonyManager mTelephonyManager;
    private TelephonyManager mTelephonyManager;

    public NetworkProviderWorker(Context context, Uri uri) {
        super(context, uri);
@@ -68,9 +66,10 @@ public class NetworkProviderWorker extends WifiScanWorker implements
        mMobileDataObserver = new DataContentObserver(handler, this);

        mContext = context;
        mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
        mDefaultDataSubid = getDefaultDataSubscriptionId();

        mTelephonyManager = mContext.getSystemService(
                TelephonyManager.class).createForSubscriptionId(mDefaultDataSubid);
        mPhoneStateListener = new NetworkProviderPhoneStateListener(handler::post);
        mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
        mDataEnabledListener = new MobileDataEnabledListener(context, this);
@@ -80,15 +79,12 @@ public class NetworkProviderWorker extends WifiScanWorker implements

    @Override
    protected void onSlicePinned() {
        mMobileDataObserver.register(mContext,
                getDefaultSubscriptionId(mSubscriptionManager));

        mMobileDataObserver.register(mContext, mDefaultDataSubid);
        mSubscriptionsListener.start();
        mDataEnabledListener.start(SubscriptionManager.getDefaultDataSubscriptionId());
        mDataEnabledListener.start(mDefaultDataSubid);
        mConnectivityListener.start();
        mSignalStrengthListener.resume();
        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
                | PhoneStateListener.LISTEN_ACTIVE_DATA_SUBSCRIPTION_ID_CHANGE
                | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);

        super.onSlicePinned();
@@ -125,15 +121,22 @@ public class NetworkProviderWorker extends WifiScanWorker implements

    @Override
    public void onSubscriptionsChanged() {
        int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId();
        int defaultDataSubId = getDefaultDataSubscriptionId();
        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(
                SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)
                        ? Collections.singleton(defaultDataSubId) : Collections.emptySet());
        if (defaultDataSubId != mDataEnabledListener.getSubId()) {
            mDataEnabledListener.stop();
            mDataEnabledListener.start(defaultDataSubId);
            mSignalStrengthListener.updateSubscriptionIds(Collections.singleton(defaultDataSubId));
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(defaultDataSubId);
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
                    | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
            mMobileDataObserver.register(mContext, mDefaultDataSubid);
        } else {
            mSignalStrengthListener.updateSubscriptionIds(Collections.emptySet());
        }
        updateSlice();
    }
@@ -180,6 +183,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements

        /**
         * To register the observer for mobile data changed.
         *
         * @param context the Context object.
         * @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.
         *
         * @param context the Context object.
         */
        public void unregister(Context context) {
@@ -209,12 +214,6 @@ public class NetworkProviderWorker extends WifiScanWorker implements
            updateSlice();
        }

        @Override
        public void onActiveDataSubscriptionIdChanged(int subId) {
            Log.d(TAG, "onActiveDataSubscriptionIdChanged: subId=" + subId);
            updateSlice();
        }

        @Override
        public void 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) {
        final SubscriptionInfo defaultSubscription = subscriptionManager.getActiveSubscriptionInfo(
                subscriptionManager.getDefaultDataSubscriptionId());

        if (defaultSubscription == null) {
            return SubscriptionManager.INVALID_SUBSCRIPTION_ID; // No default subscription
        }
        return defaultSubscription.getSubscriptionId();
    @VisibleForTesting
    int getDefaultDataSubscriptionId() {
        return SubscriptionManager.getDefaultDataSubscriptionId();
    }
}
+5 −5
Original line number Diff line number Diff line
@@ -178,7 +178,7 @@ public class ProviderModelSliceTest {
    public void getSlice_noWifiAndHasCarrierNoData_oneCarrierOneGridRowWithAllNetworkUnavailable() {
        mWifiList.clear();
        mMockNetworkProviderWorker.updateSelfResults(null);
        mockHelperCondition(false, true, true, null);
        mockHelperCondition(false, true, false, null);

        final Slice slice = mMockProviderModelSlice.getSlice();

@@ -192,7 +192,7 @@ public class ProviderModelSliceTest {
    public void getSlice_noWifiAndNoCarrier_oneCarrierOneGridRowWithNonCarrierNetworkUnavailable() {
        mWifiList.clear();
        mMockProviderModelSlice = new MockProviderModelSlice(mContext, null);
        mockHelperCondition(false, true, false, null);
        mockHelperCondition(false, true, true, null);

        final Slice slice = mMockProviderModelSlice.getSlice();

@@ -212,7 +212,7 @@ public class ProviderModelSliceTest {
                WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi2_key", true);
        mWifiList.add(mMockWifiSliceItem2);
        mMockNetworkProviderWorker.updateSelfResults(mWifiList);
        mockHelperCondition(false, true, false, mWifiList.get(0));
        mockHelperCondition(false, true, true, mWifiList.get(0));

        final Slice slice = mMockProviderModelSlice.getSlice();

@@ -268,10 +268,10 @@ public class ProviderModelSliceTest {
    }

    private void mockHelperCondition(boolean airplaneMode, boolean hasCarrier,
            boolean isNoCarrierData, WifiSliceItem connectedWifiItem) {
            boolean isDataSimActive, WifiSliceItem connectedWifiItem) {
        when(mProviderModelSliceHelper.isAirplaneModeEnabled()).thenReturn(airplaneMode);
        when(mProviderModelSliceHelper.hasCarrier()).thenReturn(hasCarrier);
        when(mProviderModelSliceHelper.isNoCarrierData()).thenReturn(isNoCarrierData);
        when(mProviderModelSliceHelper.isDataSimActive()).thenReturn(isDataSimActive);
        when(mProviderModelSliceHelper.getConnectedWifiItem(any())).thenReturn(connectedWifiItem);
    }

+11 −13
Original line number Diff line number Diff line
@@ -69,7 +69,6 @@ public class NetworkProviderWorkerTest {
        MockitoAnnotations.initMocks(this);
        mContext = spy(ApplicationProvider.getApplicationContext());

        when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
        when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
        when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
@@ -141,6 +140,7 @@ public class NetworkProviderWorkerTest {
    public void onSubscriptionsChanged_notifySubscriptionChanged_callUpdateSlice() {
        mMockNetworkProviderWorker.onSlicePinned();
        mMockNetworkProviderWorker.receiveNotification(false);
        mMockNetworkProviderWorker.setDefaultDataSubscriptionId(2);

        mMockNetworkProviderWorker.onSubscriptionsChanged();

@@ -213,17 +213,6 @@ public class NetworkProviderWorkerTest {
        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
    @UiThreadTest
    public void onDisplayInfoChanged_notifyPhoneStateListener_callUpdateSlice() {
@@ -238,7 +227,7 @@ public class NetworkProviderWorkerTest {

    public class MockNetworkProviderWorker extends NetworkProviderWorker {
        private boolean mHasNotification = false;

        private int mDefaultDataSubId = 1;
        MockNetworkProviderWorker(Context context, Uri uri) {
            super(context, uri);
        }
@@ -260,5 +249,14 @@ public class NetworkProviderWorkerTest {
        public void setWifiPickerTracker(WifiPickerTracker wifiPickerTracker) {
            mWifiPickerTracker = wifiPickerTracker;
        }

        @Override
        public int getDefaultDataSubscriptionId() {
            return mDefaultDataSubId;
        }

        public void setDefaultDataSubscriptionId(int defaultDataSubId) {
            mDefaultDataSubId = defaultDataSubId;
        }
    }
}