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); 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) { public MultinetworkPolicyTracker(Context ctx, Handler handler, Runnable avoidBadWifiCallback) {
mContext = ctx; mContext = ctx;
mResources = new ConnectivityResources(ctx); mResources = new ConnectivityResources(ctx);
@@ -128,13 +126,12 @@ public class MultinetworkPolicyTracker {
} }
}; };
ctx.getSystemService(TelephonyManager.class).registerTelephonyCallback(
new HandlerExecutor(handler), new ActiveDataSubscriptionIdListener());
updateAvoidBadWifi(); updateAvoidBadWifi();
updateMeteredMultipathPreference(); 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() { public void start() {
for (Uri uri : mSettingsUris) { for (Uri uri : mSettingsUris) {
mResolver.registerContentObserver(uri, false, mSettingObserver); mResolver.registerContentObserver(uri, false, mSettingObserver);
@@ -145,6 +142,9 @@ public class MultinetworkPolicyTracker {
mContext.registerReceiverForAllUsers(mBroadcastReceiver, intentFilter, mContext.registerReceiverForAllUsers(mBroadcastReceiver, intentFilter,
null /* broadcastPermission */, mHandler); null /* broadcastPermission */, mHandler);
mContext.getSystemService(TelephonyManager.class).registerTelephonyCallback(
new HandlerExecutor(mHandler), new ActiveDataSubscriptionIdListener());
reevaluate(); 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.ConnectivitySettingsManager.NETWORK_METERED_MULTIPATH_PREFERENCE
import android.net.util.MultinetworkPolicyTracker.ActiveDataSubscriptionIdListener import android.net.util.MultinetworkPolicyTracker.ActiveDataSubscriptionIdListener
import android.os.Build import android.os.Build
import android.os.Handler
import android.provider.Settings import android.provider.Settings
import android.telephony.SubscriptionInfo import android.telephony.SubscriptionInfo
import android.telephony.SubscriptionManager import android.telephony.SubscriptionManager
@@ -40,6 +41,7 @@ import org.junit.After
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor
@@ -48,6 +50,7 @@ import org.mockito.ArgumentMatchers.argThat
import org.mockito.ArgumentMatchers.eq import org.mockito.ArgumentMatchers.eq
import org.mockito.Mockito.any import org.mockito.Mockito.any
import org.mockito.Mockito.doCallRealMethod import org.mockito.Mockito.doCallRealMethod
import org.mockito.Mockito.doNothing
import org.mockito.Mockito.doReturn import org.mockito.Mockito.doReturn
import org.mockito.Mockito.mock import org.mockito.Mockito.mock
import org.mockito.Mockito.times import org.mockito.Mockito.times
@@ -90,7 +93,8 @@ class MultinetworkPolicyTrackerTest {
Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "1") Settings.Global.putString(resolver, NETWORK_AVOID_BAD_WIFI, "1")
ConnectivityResources.setResourcesContextForTest(it) 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) { private fun assertMultipathPreference(preference: Int) {
Settings.Global.putString(resolver, NETWORK_METERED_MULTIPATH_PREFERENCE, Settings.Global.putString(resolver, NETWORK_METERED_MULTIPATH_PREFERENCE,
@@ -99,6 +103,11 @@ class MultinetworkPolicyTrackerTest {
assertEquals(preference, tracker.meteredMultipathPreference) assertEquals(preference, tracker.meteredMultipathPreference)
} }
@Before
fun setUp() {
tracker.start()
}
@After @After
fun tearDown() { fun tearDown() {
ConnectivityResources.setResourcesContextForTest(null) ConnectivityResources.setResourcesContextForTest(null)