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

Commit c0b8f62b authored by SongFerngWang's avatar SongFerngWang Committed by SongFerng Wang
Browse files

The UI is not immediately updated

Solution: Add Data Connection State listener by PhoneStateListener.

Bug: 178350321
Test: atest NetworkProviderWorkerTest
Change-Id: I692209035332bfd463537988f4e3ce166414031e
(cherry picked from commit 59958e66)
Merged-In: I692209035332bfd463537988f4e3ce166414031e
parent 16fa7736
Loading
Loading
Loading
Loading
+19 −17
Original line number Diff line number Diff line
@@ -43,8 +43,6 @@ import com.android.settingslib.mobile.MobileMappings;
import com.android.settingslib.mobile.MobileMappings.Config;

import java.util.Collections;
import java.util.concurrent.Executor;


/**
 * BackgroundWorker for Provider Model slice.
@@ -63,6 +61,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
    private DataConnectivityListener mConnectivityListener;
    private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private final Context mContext;
    final Handler mHandler;
    @VisibleForTesting
    final PhoneStateListener mPhoneStateListener;
    private TelephonyManager mTelephonyManager;
@@ -76,15 +75,15 @@ public class NetworkProviderWorker extends WifiScanWorker implements
    public NetworkProviderWorker(Context context, Uri uri) {
        super(context, uri);
        // Mobile data worker
        final Handler handler = new Handler(Looper.getMainLooper());
        mMobileDataObserver = new DataContentObserver(handler, this);
        mHandler = new Handler(Looper.getMainLooper());
        mMobileDataObserver = new DataContentObserver(mHandler, this);

        mContext = context;
        mDefaultDataSubid = getDefaultDataSubscriptionId();

        mTelephonyManager = mContext.getSystemService(
                TelephonyManager.class).createForSubscriptionId(mDefaultDataSubid);
        mPhoneStateListener = new NetworkProviderPhoneStateListener(handler::post);
        mPhoneStateListener = new NetworkProviderPhoneStateListener();
        mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
        mDataEnabledListener = new MobileDataEnabledListener(context, this);
        mConnectivityListener = new DataConnectivityListener(context, this);
@@ -102,9 +101,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
        mDataEnabledListener.start(mDefaultDataSubid);
        mConnectivityListener.start();
        mSignalStrengthListener.resume();
        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
                | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);

        mTelephonyManager.registerPhoneStateListener(mHandler::post, mPhoneStateListener);
        super.onSlicePinned();
    }

@@ -115,7 +112,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
        mDataEnabledListener.stop();
        mConnectivityListener.stop();
        mSignalStrengthListener.pause();
        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
        mTelephonyManager.unregisterPhoneStateListener(mPhoneStateListener);
        super.onSliceUnpinned();
    }

@@ -145,13 +142,12 @@ public class NetworkProviderWorker extends WifiScanWorker implements
            return;
        }
        if (SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)) {
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
            mTelephonyManager.unregisterPhoneStateListener(mPhoneStateListener);
            mMobileDataObserver.unregister(mContext);

            mSignalStrengthListener.updateSubscriptionIds(Collections.singleton(defaultDataSubId));
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(defaultDataSubId);
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
                    | PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
            mTelephonyManager.registerPhoneStateListener(mHandler::post, mPhoneStateListener);
            mMobileDataObserver.register(mContext, mDefaultDataSubid);
            mConfig = getConfig(mContext);
        } else {
@@ -221,11 +217,10 @@ public class NetworkProviderWorker extends WifiScanWorker implements
        }
    }

    class NetworkProviderPhoneStateListener extends PhoneStateListener {
        NetworkProviderPhoneStateListener(Executor executor) {
            super(executor);
        }

    class NetworkProviderPhoneStateListener extends PhoneStateListener implements
            PhoneStateListener.DataConnectionStateChangedListener,
            PhoneStateListener.DisplayInfoChangedListener,
            PhoneStateListener.ServiceStateChangedListener {
        @Override
        public void onServiceStateChanged(ServiceState state) {
            Log.d(TAG, "onServiceStateChanged voiceState=" + state.getState()
@@ -239,6 +234,13 @@ public class NetworkProviderWorker extends WifiScanWorker implements
            mTelephonyDisplayInfo = telephonyDisplayInfo;
            updateSlice();
        }

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

    @VisibleForTesting
+12 −0
Original line number Diff line number Diff line
@@ -228,6 +228,18 @@ public class NetworkProviderWorkerTest {
        assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
    }

    @Test
    @UiThreadTest
    public void onDataConnectionStateChanged_notifyPhoneStateListener_callUpdateSlice() {
        mMockNetworkProviderWorker.onSlicePinned();
        mMockNetworkProviderWorker.receiveNotification(false);

        mMockNetworkProviderWorker.mPhoneStateListener.onDataConnectionStateChanged(
                TelephonyManager.DATA_DISCONNECTED, TelephonyManager.NETWORK_TYPE_LTE);

        assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
    }

    @Test
    public void onInternetTypeChanged_connectedFromWifiToEthernet_callUpdateSlice() {
        mMockNetworkProviderWorker.receiveNotification(false);