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 59958e663d
)
Merged-In: I692209035332bfd463537988f4e3ce166414031e
This commit is contained in:
committed by
SongFerng Wang
parent
16fa77369f
commit
c0b8f62b57
@@ -43,8 +43,6 @@ import com.android.settingslib.mobile.MobileMappings;
|
|||||||
import com.android.settingslib.mobile.MobileMappings.Config;
|
import com.android.settingslib.mobile.MobileMappings.Config;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BackgroundWorker for Provider Model slice.
|
* BackgroundWorker for Provider Model slice.
|
||||||
@@ -63,6 +61,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
private DataConnectivityListener mConnectivityListener;
|
private DataConnectivityListener mConnectivityListener;
|
||||||
private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
private int mDefaultDataSubid = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
final Handler mHandler;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final PhoneStateListener mPhoneStateListener;
|
final PhoneStateListener mPhoneStateListener;
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
@@ -76,15 +75,15 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
public NetworkProviderWorker(Context context, Uri uri) {
|
public NetworkProviderWorker(Context context, Uri uri) {
|
||||||
super(context, uri);
|
super(context, uri);
|
||||||
// Mobile data worker
|
// Mobile data worker
|
||||||
final Handler handler = new Handler(Looper.getMainLooper());
|
mHandler = new Handler(Looper.getMainLooper());
|
||||||
mMobileDataObserver = new DataContentObserver(handler, this);
|
mMobileDataObserver = new DataContentObserver(mHandler, this);
|
||||||
|
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mDefaultDataSubid = getDefaultDataSubscriptionId();
|
mDefaultDataSubid = getDefaultDataSubscriptionId();
|
||||||
|
|
||||||
mTelephonyManager = mContext.getSystemService(
|
mTelephonyManager = mContext.getSystemService(
|
||||||
TelephonyManager.class).createForSubscriptionId(mDefaultDataSubid);
|
TelephonyManager.class).createForSubscriptionId(mDefaultDataSubid);
|
||||||
mPhoneStateListener = new NetworkProviderPhoneStateListener(handler::post);
|
mPhoneStateListener = new NetworkProviderPhoneStateListener();
|
||||||
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
|
mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
|
||||||
mDataEnabledListener = new MobileDataEnabledListener(context, this);
|
mDataEnabledListener = new MobileDataEnabledListener(context, this);
|
||||||
mConnectivityListener = new DataConnectivityListener(context, this);
|
mConnectivityListener = new DataConnectivityListener(context, this);
|
||||||
@@ -102,9 +101,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
mDataEnabledListener.start(mDefaultDataSubid);
|
mDataEnabledListener.start(mDefaultDataSubid);
|
||||||
mConnectivityListener.start();
|
mConnectivityListener.start();
|
||||||
mSignalStrengthListener.resume();
|
mSignalStrengthListener.resume();
|
||||||
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
|
mTelephonyManager.registerPhoneStateListener(mHandler::post, mPhoneStateListener);
|
||||||
| PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
|
|
||||||
|
|
||||||
super.onSlicePinned();
|
super.onSlicePinned();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,7 +112,7 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
mDataEnabledListener.stop();
|
mDataEnabledListener.stop();
|
||||||
mConnectivityListener.stop();
|
mConnectivityListener.stop();
|
||||||
mSignalStrengthListener.pause();
|
mSignalStrengthListener.pause();
|
||||||
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
|
mTelephonyManager.unregisterPhoneStateListener(mPhoneStateListener);
|
||||||
super.onSliceUnpinned();
|
super.onSliceUnpinned();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,13 +142,12 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)) {
|
if (SubscriptionManager.isUsableSubscriptionId(defaultDataSubId)) {
|
||||||
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
|
mTelephonyManager.unregisterPhoneStateListener(mPhoneStateListener);
|
||||||
mMobileDataObserver.unregister(mContext);
|
mMobileDataObserver.unregister(mContext);
|
||||||
|
|
||||||
mSignalStrengthListener.updateSubscriptionIds(Collections.singleton(defaultDataSubId));
|
mSignalStrengthListener.updateSubscriptionIds(Collections.singleton(defaultDataSubId));
|
||||||
mTelephonyManager = mTelephonyManager.createForSubscriptionId(defaultDataSubId);
|
mTelephonyManager = mTelephonyManager.createForSubscriptionId(defaultDataSubId);
|
||||||
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE
|
mTelephonyManager.registerPhoneStateListener(mHandler::post, mPhoneStateListener);
|
||||||
| PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED);
|
|
||||||
mMobileDataObserver.register(mContext, mDefaultDataSubid);
|
mMobileDataObserver.register(mContext, mDefaultDataSubid);
|
||||||
mConfig = getConfig(mContext);
|
mConfig = getConfig(mContext);
|
||||||
} else {
|
} else {
|
||||||
@@ -221,11 +217,10 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class NetworkProviderPhoneStateListener extends PhoneStateListener {
|
class NetworkProviderPhoneStateListener extends PhoneStateListener implements
|
||||||
NetworkProviderPhoneStateListener(Executor executor) {
|
PhoneStateListener.DataConnectionStateChangedListener,
|
||||||
super(executor);
|
PhoneStateListener.DisplayInfoChangedListener,
|
||||||
}
|
PhoneStateListener.ServiceStateChangedListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onServiceStateChanged(ServiceState state) {
|
public void onServiceStateChanged(ServiceState state) {
|
||||||
Log.d(TAG, "onServiceStateChanged voiceState=" + state.getState()
|
Log.d(TAG, "onServiceStateChanged voiceState=" + state.getState()
|
||||||
@@ -239,6 +234,13 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
mTelephonyDisplayInfo = telephonyDisplayInfo;
|
mTelephonyDisplayInfo = telephonyDisplayInfo;
|
||||||
updateSlice();
|
updateSlice();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDataConnectionStateChanged(int state, int networkType) {
|
||||||
|
Log.d(TAG,
|
||||||
|
"onDataConnectionStateChanged: networkType=" + networkType + " state=" + state);
|
||||||
|
updateSlice();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
|
@@ -228,6 +228,18 @@ public class NetworkProviderWorkerTest {
|
|||||||
assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
|
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
|
@Test
|
||||||
public void onInternetTypeChanged_connectedFromWifiToEthernet_callUpdateSlice() {
|
public void onInternetTypeChanged_connectedFromWifiToEthernet_callUpdateSlice() {
|
||||||
mMockNetworkProviderWorker.receiveNotification(false);
|
mMockNetworkProviderWorker.receiveNotification(false);
|
||||||
|
Reference in New Issue
Block a user