Start listening to telephony changes in #start()

Starting to listen on the handler races with the rest of
the constructor. The class already has a #start() method
meant to start listening, so implement better practices
by leveraging this method.

Test: CtsNetTestCases
      FrameworksNetIntegrationTests
      FrameworksNetTests
Change-Id: I772f761d3ca5f9711b9d988e6330b0878814f491
This commit is contained in:
Chalard Jean
2022-09-21 17:11:03 +09:00
parent 0172361ad4
commit f11ed8c699
2 changed files with 15 additions and 6 deletions

View File

@@ -109,8 +109,6 @@ public class MultinetworkPolicyTracker {
this(ctx, handler, null);
}
// TODO: Set the mini sdk to 31 and remove @TargetApi annotation when b/205923322 is addressed.
@TargetApi(Build.VERSION_CODES.S)
public MultinetworkPolicyTracker(Context ctx, Handler handler, Runnable avoidBadWifiCallback) {
mContext = ctx;
mResources = new ConnectivityResources(ctx);
@@ -128,13 +126,12 @@ public class MultinetworkPolicyTracker {
}
};
ctx.getSystemService(TelephonyManager.class).registerTelephonyCallback(
new HandlerExecutor(handler), new ActiveDataSubscriptionIdListener());
updateAvoidBadWifi();
updateMeteredMultipathPreference();
}
// TODO: Set the mini sdk to 31 and remove @TargetApi annotation when b/205923322 is addressed.
@TargetApi(Build.VERSION_CODES.S)
public void start() {
for (Uri uri : mSettingsUris) {
mResolver.registerContentObserver(uri, false, mSettingObserver);
@@ -145,6 +142,9 @@ public class MultinetworkPolicyTracker {
mContext.registerReceiverForAllUsers(mBroadcastReceiver, intentFilter,
null /* broadcastPermission */, mHandler);
mContext.getSystemService(TelephonyManager.class).registerTelephonyCallback(
new HandlerExecutor(mHandler), new ActiveDataSubscriptionIdListener());
reevaluate();
}

View File

@@ -26,6 +26,7 @@ import android.net.ConnectivitySettingsManager.NETWORK_AVOID_BAD_WIFI
import android.net.ConnectivitySettingsManager.NETWORK_METERED_MULTIPATH_PREFERENCE
import android.net.util.MultinetworkPolicyTracker.ActiveDataSubscriptionIdListener
import android.os.Build
import android.os.Handler
import android.provider.Settings
import android.telephony.SubscriptionInfo
import android.telephony.SubscriptionManager
@@ -40,6 +41,7 @@ import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
@@ -48,6 +50,7 @@ import org.mockito.ArgumentMatchers.argThat
import org.mockito.ArgumentMatchers.eq
import org.mockito.Mockito.any
import org.mockito.Mockito.doCallRealMethod
import org.mockito.Mockito.doNothing
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.mock
import org.mockito.Mockito.times
@@ -90,7 +93,8 @@ class MultinetworkPolicyTrackerTest {
Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "1")
ConnectivityResources.setResourcesContextForTest(it)
}
private val tracker = MultinetworkPolicyTracker(context, null /* handler */)
private val handler = mock(Handler::class.java)
private val tracker = MultinetworkPolicyTracker(context, handler)
private fun assertMultipathPreference(preference: Int) {
Settings.Global.putString(resolver, NETWORK_METERED_MULTIPATH_PREFERENCE,
@@ -99,6 +103,11 @@ class MultinetworkPolicyTrackerTest {
assertEquals(preference, tracker.meteredMultipathPreference)
}
@Before
fun setUp() {
tracker.start()
}
@After
fun tearDown() {
ConnectivityResources.setResourcesContextForTest(null)