Fix to support secondary_user_on_secondary_display on ConnectivityManagerTest
secondary_user_on_secondary_display is for background users that
have access to UI on assigned displays (a.k.a. visible background
users)on devices that have config_multiuserVisibleBackgroundUsers
enabled.
The main use case is Automotive's multi-display
Whole Cabin experience where passengers (modeled as visible background
users) can interact with the display in front of them concurrently
with the driver (modeled as the the current user) interacting with
driver's display.
The visible background user is not a current profile user.
So it needs android.Manifest.permission.INTERACT_ACROSS_USERS_FULL
to use WifiManager.getConnectionInfo() on the visible background user.
Fixes include
- Make to have the android.Manifest.permission.INTERACT_ACROSS_USERS_FULL permission, when using WifiManager.getConnectionInfo in ConnectivityManagerTest.
Bug: 380776983
Flag: EXEMPT test fix
Test: atest CtsNetTestCases:android.net.cts.ConnectivityManagerTest --user-type secondary_user_on_secondary_display
(cherry picked from https://android-review.googlesource.com/q/commit:cc2e9cb52e67946adb0501e72a8f26b7340b1cd3)
Merged-In: I58370c7973a6bc5e362c50959e6e942fcb4c2ffd
Change-Id: I58370c7973a6bc5e362c50959e6e942fcb4c2ffd
diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
index 3338712..0c3bb89 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -1553,7 +1553,7 @@
assumeTrue(mPackageManager.hasSystemFeature(FEATURE_WIFI));
final ContentResolver resolver = mContext.getContentResolver();
mCtsNetUtils.ensureWifiConnected();
- final String ssid = unquoteSSID(mWifiManager.getConnectionInfo().getSSID());
+ final String ssid = unquoteSSID(getSSID());
final String oldMeteredSetting = getWifiMeteredStatus(ssid);
final String oldMeteredMultipathPreference = Settings.Global.getString(
resolver, NETWORK_METERED_MULTIPATH_PREFERENCE);
@@ -1566,7 +1566,7 @@
// since R.
final Network network = setWifiMeteredStatusAndWait(ssid, true /* isMetered */,
false /* waitForValidation */);
- assertEquals(ssid, unquoteSSID(mWifiManager.getConnectionInfo().getSSID()));
+ assertEquals(ssid, unquoteSSID(getSSID()));
assertEquals(mCm.getNetworkCapabilities(network).hasCapability(
NET_CAPABILITY_NOT_METERED), false);
assertMultipathPreferenceIsEventually(network, initialMeteredPreference,
@@ -2366,7 +2366,7 @@
mPackageManager.hasSystemFeature(FEATURE_WIFI));
final Network network = mCtsNetUtils.ensureWifiConnected();
- final String ssid = unquoteSSID(mWifiManager.getConnectionInfo().getSSID());
+ final String ssid = unquoteSSID(getSSID());
assertNotNull("Ssid getting from WifiManager is null", ssid);
// This package should have no NETWORK_SETTINGS permission. Verify that no ssid is contained
// in the NetworkCapabilities.
@@ -2877,6 +2877,15 @@
new Handler(Looper.getMainLooper())), NETWORK_SETTINGS);
}
+ /**
+ * It needs android.Manifest.permission.INTERACT_ACROSS_USERS_FULL
+ * to use WifiManager.getConnectionInfo() on the visible background user.
+ */
+ private String getSSID() {
+ return runWithShellPermissionIdentity(() ->
+ mWifiManager.getConnectionInfo().getSSID());
+ }
+
private static final class OnCompleteListenerCallback {
final CompletableFuture<Object> mDone = new CompletableFuture<>();