diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 860a6b754b94a..3678cf1f37b4a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -2931,6 +2931,9 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (mZenModeController != null) { mZenModeController.setUserId(mCurrentUserId); } + if (mSecurityController != null) { + mSecurityController.onUserSwitched(mCurrentUserId); + } } private void resetUserSetupObserver() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java index 962000a606225..b505d9d32383e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -64,6 +64,7 @@ public class SecurityControllerImpl implements SecurityController { private SparseArray mCurrentVpns = new SparseArray<>(); private int mCurrentUserId; + private int mVpnUserId; public SecurityControllerImpl(Context context) { mContext = context; @@ -78,7 +79,7 @@ public class SecurityControllerImpl implements SecurityController { // TODO: re-register network callback on user change. mConnectivityManager.registerNetworkCallback(REQUEST, mNetworkCallback); - mCurrentUserId = ActivityManager.getCurrentUser(); + onUserSwitched(ActivityManager.getCurrentUser()); } public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { @@ -123,9 +124,9 @@ public class SecurityControllerImpl implements SecurityController { @Override public String getPrimaryVpnName() { - VpnConfig cfg = mCurrentVpns.get(mCurrentUserId); + VpnConfig cfg = mCurrentVpns.get(mVpnUserId); if (cfg != null) { - return getNameForVpnConfig(cfg, new UserHandle(mCurrentUserId)); + return getNameForVpnConfig(cfg, new UserHandle(mVpnUserId)); } else { return null; } @@ -133,8 +134,8 @@ public class SecurityControllerImpl implements SecurityController { @Override public String getProfileVpnName() { - for (UserInfo profile : mUserManager.getProfiles(mCurrentUserId)) { - if (profile.id == mCurrentUserId) { + for (UserInfo profile : mUserManager.getProfiles(mVpnUserId)) { + if (profile.id == mVpnUserId) { continue; } VpnConfig cfg = mCurrentVpns.get(profile.id); @@ -147,7 +148,7 @@ public class SecurityControllerImpl implements SecurityController { @Override public boolean isVpnEnabled() { - for (UserInfo profile : mUserManager.getProfiles(mCurrentUserId)) { + for (UserInfo profile : mUserManager.getProfiles(mVpnUserId)) { if (mCurrentVpns.get(profile.id) != null) { return true; } @@ -172,6 +173,12 @@ public class SecurityControllerImpl implements SecurityController { @Override public void onUserSwitched(int newUserId) { mCurrentUserId = newUserId; + if (mUserManager.getUserInfo(newUserId).isRestricted()) { + // VPN for a restricted profile is routed through its owner user + mVpnUserId = UserHandle.USER_OWNER; + } else { + mVpnUserId = mCurrentUserId; + } fireCallbacks(); }