Reland "Add an API to listen for changes in network blocked status of an uid."
This reverts commit 133410313f.
Reason for revert: The issue causing the build breakage has been fixed
Change-Id: I03fa406551b51aaa4d4d9255cf1a53f9b4bcc1bd
Merged-In: Ib9949b8619c6b148f73630b314c4113d76c31ec1
This commit is contained in:
@@ -84,10 +84,10 @@ import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI_AWARE;
|
||||
import static android.net.NetworkPolicyManager.RULE_ALLOW_METERED;
|
||||
import static android.net.NetworkPolicyManager.RULE_NONE;
|
||||
import static android.net.NetworkPolicyManager.RULE_REJECT_ALL;
|
||||
import static android.net.NetworkPolicyManager.RULE_REJECT_METERED;
|
||||
import static android.net.NetworkPolicyManager.BLOCKED_METERED_REASON_DATA_SAVER;
|
||||
import static android.net.NetworkPolicyManager.BLOCKED_METERED_REASON_USER_RESTRICTED;
|
||||
import static android.net.NetworkPolicyManager.BLOCKED_REASON_BATTERY_SAVER;
|
||||
import static android.net.NetworkPolicyManager.BLOCKED_REASON_NONE;
|
||||
import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID;
|
||||
import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK;
|
||||
import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY;
|
||||
@@ -184,7 +184,6 @@ import android.net.IDnsResolver;
|
||||
import android.net.INetd;
|
||||
import android.net.INetworkMonitor;
|
||||
import android.net.INetworkMonitorCallbacks;
|
||||
import android.net.INetworkPolicyListener;
|
||||
import android.net.IOnCompleteListener;
|
||||
import android.net.IQosCallback;
|
||||
import android.net.InetAddresses;
|
||||
@@ -203,6 +202,7 @@ import android.net.NetworkFactory;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.NetworkInfo.DetailedState;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.net.NetworkPolicyManager.NetworkPolicyCallback;
|
||||
import android.net.NetworkRequest;
|
||||
import android.net.NetworkScore;
|
||||
import android.net.NetworkSpecifier;
|
||||
@@ -419,7 +419,7 @@ public class ConnectivityServiceTest {
|
||||
private TestNetworkAgentWrapper mEthernetNetworkAgent;
|
||||
private MockVpn mMockVpn;
|
||||
private Context mContext;
|
||||
private INetworkPolicyListener mPolicyListener;
|
||||
private NetworkPolicyCallback mPolicyCallback;
|
||||
private WrappedMultinetworkPolicyTracker mPolicyTracker;
|
||||
private HandlerThread mAlarmManagerThread;
|
||||
private TestNetIdManager mNetIdManager;
|
||||
@@ -431,8 +431,7 @@ public class ConnectivityServiceTest {
|
||||
private TestNetworkCallback mProfileDefaultNetworkCallback;
|
||||
|
||||
// State variables required to emulate NetworkPolicyManagerService behaviour.
|
||||
private int mUidRules = RULE_NONE;
|
||||
private boolean mRestrictBackground = false;
|
||||
private int mBlockedReasons = BLOCKED_REASON_NONE;
|
||||
|
||||
@Mock DeviceIdleInternal mDeviceIdleInternal;
|
||||
@Mock INetworkManagementService mNetworkManagementService;
|
||||
@@ -1371,28 +1370,13 @@ public class ConnectivityServiceTest {
|
||||
}
|
||||
|
||||
private void mockUidNetworkingBlocked() {
|
||||
doAnswer(i -> mContext.getSystemService(NetworkPolicyManager.class)
|
||||
.checkUidNetworkingBlocked(i.getArgument(0) /* uid */, mUidRules,
|
||||
i.getArgument(1) /* metered */, mRestrictBackground)
|
||||
doAnswer(i -> NetworkPolicyManager.isUidBlocked(mBlockedReasons, i.getArgument(1))
|
||||
).when(mNetworkPolicyManager).isUidNetworkingBlocked(anyInt(), anyBoolean());
|
||||
|
||||
doAnswer(inv -> mContext.getSystemService(NetworkPolicyManager.class)
|
||||
.checkUidNetworkingBlocked(inv.getArgument(0) /* uid */,
|
||||
inv.getArgument(1) /* uidRules */,
|
||||
inv.getArgument(2) /* isNetworkMetered */,
|
||||
inv.getArgument(3) /* isBackgroundRestricted */)
|
||||
).when(mNetworkPolicyManager).checkUidNetworkingBlocked(
|
||||
anyInt(), anyInt(), anyBoolean(), anyBoolean());
|
||||
}
|
||||
|
||||
private void setUidRulesChanged(int uidRules) throws RemoteException {
|
||||
mUidRules = uidRules;
|
||||
mPolicyListener.onUidRulesChanged(Process.myUid(), mUidRules);
|
||||
}
|
||||
|
||||
private void setRestrictBackgroundChanged(boolean restrictBackground) throws RemoteException {
|
||||
mRestrictBackground = restrictBackground;
|
||||
mPolicyListener.onRestrictBackgroundChanged(mRestrictBackground);
|
||||
private void setBlockedReasonChanged(int blockedReasons) {
|
||||
mBlockedReasons = blockedReasons;
|
||||
mPolicyCallback.onUidBlockedReasonChanged(Process.myUid(), blockedReasons);
|
||||
}
|
||||
|
||||
private Nat464Xlat getNat464Xlat(NetworkAgentWrapper mna) {
|
||||
@@ -1531,10 +1515,11 @@ public class ConnectivityServiceTest {
|
||||
mService.mNascentDelayMs = TEST_NASCENT_DELAY_MS;
|
||||
verify(mDeps).makeMultinetworkPolicyTracker(any(), any(), any());
|
||||
|
||||
final ArgumentCaptor<INetworkPolicyListener> policyListenerCaptor =
|
||||
ArgumentCaptor.forClass(INetworkPolicyListener.class);
|
||||
verify(mNetworkPolicyManager).registerListener(policyListenerCaptor.capture());
|
||||
mPolicyListener = policyListenerCaptor.getValue();
|
||||
final ArgumentCaptor<NetworkPolicyCallback> policyCallbackCaptor =
|
||||
ArgumentCaptor.forClass(NetworkPolicyCallback.class);
|
||||
verify(mNetworkPolicyManager).registerNetworkPolicyCallback(any(),
|
||||
policyCallbackCaptor.capture());
|
||||
mPolicyCallback = policyCallbackCaptor.getValue();
|
||||
|
||||
// Create local CM before sending system ready so that we can answer
|
||||
// getSystemService() correctly.
|
||||
@@ -7259,7 +7244,7 @@ public class ConnectivityServiceTest {
|
||||
assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
assertExtraInfoFromCmPresent(mCellNetworkAgent);
|
||||
|
||||
setUidRulesChanged(RULE_REJECT_ALL);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_BATTERY_SAVER);
|
||||
cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent);
|
||||
assertNull(mCm.getActiveNetwork());
|
||||
assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED);
|
||||
@@ -7267,17 +7252,17 @@ public class ConnectivityServiceTest {
|
||||
assertExtraInfoFromCmBlocked(mCellNetworkAgent);
|
||||
|
||||
// ConnectivityService should cache it not to invoke the callback again.
|
||||
setUidRulesChanged(RULE_REJECT_METERED);
|
||||
setBlockedReasonChanged(BLOCKED_METERED_REASON_USER_RESTRICTED);
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
|
||||
setUidRulesChanged(RULE_NONE);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_NONE);
|
||||
cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent);
|
||||
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
assertExtraInfoFromCmPresent(mCellNetworkAgent);
|
||||
|
||||
setUidRulesChanged(RULE_REJECT_METERED);
|
||||
setBlockedReasonChanged(BLOCKED_METERED_REASON_DATA_SAVER);
|
||||
cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent);
|
||||
assertNull(mCm.getActiveNetwork());
|
||||
assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED);
|
||||
@@ -7302,33 +7287,33 @@ public class ConnectivityServiceTest {
|
||||
assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED);
|
||||
assertExtraInfoFromCmBlocked(mCellNetworkAgent);
|
||||
|
||||
setUidRulesChanged(RULE_ALLOW_METERED);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_NONE);
|
||||
cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent);
|
||||
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
assertExtraInfoFromCmPresent(mCellNetworkAgent);
|
||||
|
||||
setUidRulesChanged(RULE_NONE);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_NONE);
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
|
||||
// Restrict background data. Networking is not blocked because the network is unmetered.
|
||||
setRestrictBackgroundChanged(true);
|
||||
setBlockedReasonChanged(BLOCKED_METERED_REASON_DATA_SAVER);
|
||||
cellNetworkCallback.expectBlockedStatusCallback(true, mCellNetworkAgent);
|
||||
assertNull(mCm.getActiveNetwork());
|
||||
assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED);
|
||||
assertNetworkInfo(TYPE_MOBILE, DetailedState.BLOCKED);
|
||||
assertExtraInfoFromCmBlocked(mCellNetworkAgent);
|
||||
setRestrictBackgroundChanged(true);
|
||||
setBlockedReasonChanged(BLOCKED_METERED_REASON_DATA_SAVER);
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
|
||||
setUidRulesChanged(RULE_ALLOW_METERED);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_NONE);
|
||||
cellNetworkCallback.expectBlockedStatusCallback(false, mCellNetworkAgent);
|
||||
assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
assertNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
assertExtraInfoFromCmPresent(mCellNetworkAgent);
|
||||
|
||||
setRestrictBackgroundChanged(false);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_NONE);
|
||||
cellNetworkCallback.assertNoCallback();
|
||||
assertEquals(mCellNetworkAgent.getNetwork(), mCm.getActiveNetwork());
|
||||
assertActiveNetworkInfo(TYPE_MOBILE, DetailedState.CONNECTED);
|
||||
@@ -7345,9 +7330,9 @@ public class ConnectivityServiceTest {
|
||||
mockUidNetworkingBlocked();
|
||||
|
||||
// No Networkcallbacks invoked before any network is active.
|
||||
setUidRulesChanged(RULE_REJECT_ALL);
|
||||
setUidRulesChanged(RULE_NONE);
|
||||
setUidRulesChanged(RULE_REJECT_METERED);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_BATTERY_SAVER);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_NONE);
|
||||
setBlockedReasonChanged(BLOCKED_METERED_REASON_DATA_SAVER);
|
||||
defaultCallback.assertNoCallback();
|
||||
|
||||
mCellNetworkAgent = new TestNetworkAgentWrapper(TRANSPORT_CELLULAR);
|
||||
@@ -7372,8 +7357,8 @@ public class ConnectivityServiceTest {
|
||||
defaultCallback.expectBlockedStatusCallback(false, mCellNetworkAgent);
|
||||
|
||||
// Verify there's no Networkcallbacks invoked after data saver on/off.
|
||||
setRestrictBackgroundChanged(true);
|
||||
setRestrictBackgroundChanged(false);
|
||||
setBlockedReasonChanged(BLOCKED_METERED_REASON_DATA_SAVER);
|
||||
setBlockedReasonChanged(BLOCKED_REASON_NONE);
|
||||
defaultCallback.assertNoCallback();
|
||||
|
||||
mCellNetworkAgent.disconnect();
|
||||
|
||||
Reference in New Issue
Block a user