Provide a way to override the avoid bad wifi configuration
ConnectivityManager.setAvoidUnvalidated only works if the config_networkAvoidBadWifi configuration is set to 0 and the NETWORK_AVOID_BAD_WIFI setting is unset. There is no easy way for a testing app to temporary set a test value to verify the behavior of the API. Thus, add a mechanism to allow test app to set a period of time to temporary unstrict the resource configuration, i.e. Temporary simulate config_networkAvoidBadWifi configured to 0. Bug: 186061922 Test: atest CtsNetTestCases FrameworksNetTests Change-Id: If772078c61a9b12926f104d5dfc9c9071e844732
This commit is contained in:
parent
27586f8210
commit
6eac9fb787
1 changed files with 119 additions and 25 deletions
|
|
@ -650,6 +650,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
*/
|
||||
private static final int EVENT_MOBILE_DATA_PREFERRED_UIDS_CHANGED = 54;
|
||||
|
||||
/**
|
||||
* Event to set temporary allow bad wifi within a limited time to override
|
||||
* {@code config_networkAvoidBadWifi}.
|
||||
*/
|
||||
private static final int EVENT_SET_TEST_ALLOW_BAD_WIFI_UNTIL = 55;
|
||||
|
||||
/**
|
||||
* Argument for {@link #EVENT_PROVISIONING_NOTIFICATION} to indicate that the notification
|
||||
* should be shown.
|
||||
|
|
@ -662,6 +668,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
*/
|
||||
private static final int PROVISIONING_NOTIFICATION_HIDE = 0;
|
||||
|
||||
/**
|
||||
* The maximum alive time to allow bad wifi configuration for testing.
|
||||
*/
|
||||
private static final long MAX_TEST_ALLOW_BAD_WIFI_UNTIL_MS = 5 * 60 * 1000L;
|
||||
|
||||
private static String eventName(int what) {
|
||||
return sMagicDecoderRing.get(what, Integer.toString(what));
|
||||
}
|
||||
|
|
@ -4334,6 +4345,22 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
mHandler.sendMessage(mHandler.obtainMessage(EVENT_SET_AVOID_UNVALIDATED, network));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTestAllowBadWifiUntil(long timeMs) {
|
||||
enforceSettingsPermission();
|
||||
if (!Build.isDebuggable()) {
|
||||
throw new IllegalStateException("Does not support in non-debuggable build");
|
||||
}
|
||||
|
||||
if (timeMs > System.currentTimeMillis() + MAX_TEST_ALLOW_BAD_WIFI_UNTIL_MS) {
|
||||
throw new IllegalArgumentException("It should not exceed "
|
||||
+ MAX_TEST_ALLOW_BAD_WIFI_UNTIL_MS + "ms from now");
|
||||
}
|
||||
|
||||
mHandler.sendMessage(
|
||||
mHandler.obtainMessage(EVENT_SET_TEST_ALLOW_BAD_WIFI_UNTIL, timeMs));
|
||||
}
|
||||
|
||||
private void handleSetAcceptUnvalidated(Network network, boolean accept, boolean always) {
|
||||
if (DBG) log("handleSetAcceptUnvalidated network=" + network +
|
||||
" accept=" + accept + " always=" + always);
|
||||
|
|
@ -4876,6 +4903,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||
case EVENT_MOBILE_DATA_PREFERRED_UIDS_CHANGED:
|
||||
handleMobileDataPreferredUidsChanged();
|
||||
break;
|
||||
case EVENT_SET_TEST_ALLOW_BAD_WIFI_UNTIL:
|
||||
final long timeMs = ((Long) msg.obj).longValue();
|
||||
mMultinetworkPolicyTracker.setTestAllowBadWifiUntil(timeMs);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue