diff options
author | Robin Lee <rgl@google.com> | 2015-06-01 10:57:03 -0700 |
---|---|---|
committer | Robin Lee <rgl@google.com> | 2015-06-09 12:04:23 -0700 |
commit | 472834518e2d23172189ee34e98c51f868628a90 (patch) | |
tree | cb940c66743d5e93e6f0ee36a44e4f84783f7b0d | |
parent | 8836528d7bc86742c973200f861328b3f9cbd421 (diff) | |
download | frameworks_base-472834518e2d23172189ee34e98c51f868628a90.zip frameworks_base-472834518e2d23172189ee34e98c51f868628a90.tar.gz frameworks_base-472834518e2d23172189ee34e98c51f868628a90.tar.bz2 |
Switch over to updated VPN warning strings
These are more consistent and have placeholders for the description of
whatever VPN apps are actually active.
Bug: 20516964
Bug: 17474682
Change-Id: I37ff287b795f10bbbb192540f09f8100bb27b1a0
5 files changed, 133 insertions, 48 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java index f59e864..ca38528 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java @@ -110,15 +110,13 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene } private void handleRefreshState() { - boolean hasDeviceOwner = mSecurityController.hasDeviceOwner(); - boolean hasVpn = mSecurityController.isVpnEnabled(); - - mIsVisible = (hasVpn || hasDeviceOwner); - mIsIconVisible = hasVpn; - if (hasDeviceOwner) { + mIsIconVisible = mSecurityController.isVpnEnabled(); + if (mSecurityController.hasDeviceOwner()) { mFooterTextId = R.string.device_owned_footer; + mIsVisible = true; } else { mFooterTextId = R.string.vpn_footer; + mIsVisible = mIsIconVisible; } mMainHandler.post(mUpdateDisplayState); } @@ -132,15 +130,17 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene } private void createDialog() { - boolean hasDeviceOwner = mSecurityController.hasDeviceOwner(); - boolean hasProfile = mSecurityController.hasProfileOwner(); - boolean hasVpn = mSecurityController.isVpnEnabled(); + String deviceOwner = mSecurityController.getDeviceOwnerName(); + String profileOwner = mSecurityController.getProfileOwnerName(); + String primaryVpn = mSecurityController.getPrimaryVpnName(); + String profileVpn = mSecurityController.getProfileVpnName(); + boolean managed = mSecurityController.hasProfileOwner(); mDialog = new SystemUIDialog(mContext); - mDialog.setTitle(getTitle(hasDeviceOwner, hasProfile)); - mDialog.setMessage(getMessage(hasDeviceOwner, hasProfile, hasVpn)); + mDialog.setTitle(getTitle(deviceOwner)); + mDialog.setMessage(getMessage(deviceOwner, profileOwner, primaryVpn, profileVpn, managed)); mDialog.setButton(DialogInterface.BUTTON_POSITIVE, getPositiveButton(), this); - if (hasVpn) { + if (mSecurityController.isVpnEnabled()) { mDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getNegativeButton(), this); } mDialog.show(); @@ -154,31 +154,42 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene return mContext.getString(R.string.quick_settings_done); } - private String getMessage(boolean hasDeviceOwner, boolean hasProfile, boolean hasVpn) { - if (hasDeviceOwner) { - if (hasVpn) { - return mContext.getString(R.string.monitoring_description_vpn_device_owned, - mSecurityController.getDeviceOwnerName()); + private String getMessage(String deviceOwner, String profileOwner, String primaryVpn, + String profileVpn, boolean primaryUserIsManaged) { + if (deviceOwner != null) { + if (primaryVpn != null) { + return mContext.getString(R.string.monitoring_description_vpn_app_device_owned, + deviceOwner, primaryVpn); } else { return mContext.getString(R.string.monitoring_description_device_owned, - mSecurityController.getDeviceOwnerName()); + deviceOwner); + } + } else if (primaryVpn != null) { + if (profileVpn != null) { + return mContext.getString(R.string.monitoring_description_app_personal_work, + profileOwner, profileVpn, primaryVpn); + } else { + return mContext.getString(R.string.monitoring_description_app_personal, + primaryVpn); } - } else if (hasProfile) { - return mContext.getString( - R.string.monitoring_description_vpn_profile_owned, - mSecurityController.getProfileOwnerName()); + } else if (profileVpn != null) { + return mContext.getString(R.string.monitoring_description_app_work, + profileOwner, profileVpn); + } else if (profileOwner != null && primaryUserIsManaged) { + return mContext.getString(R.string.monitoring_description_device_owned, + profileOwner); } else { - return mContext.getString(R.string.monitoring_description_vpn); + // No device owner, no personal VPN, no work VPN, no user owner. Why are we here? + return null; } } - private int getTitle(boolean hasDeviceOwner, boolean hasProfile) { - if (hasDeviceOwner) { + private int getTitle(String deviceOwner) { + if (deviceOwner != null) { return R.string.monitoring_title_device_owned; - } else if (hasProfile) { - return R.string.monitoring_title_profile_owned; + } else { + return R.string.monitoring_title; } - return R.string.monitoring_title; } private final Runnable mUpdateDisplayState = new Runnable() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java index e1e022d..40984d4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java @@ -22,6 +22,8 @@ public interface SecurityController { String getDeviceOwnerName(); String getProfileOwnerName(); boolean isVpnEnabled(); + String getPrimaryVpnName(); + String getProfileVpnName(); void onUserSwitched(int newUserId); void addCallback(SecurityControllerCallback callback); 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 4f47cc6..962000a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityControllerImpl.java @@ -36,6 +36,7 @@ import android.util.SparseArray; import com.android.internal.net.VpnConfig; import com.android.internal.net.VpnInfo; +import com.android.systemui.R; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -61,7 +62,7 @@ public class SecurityControllerImpl implements SecurityController { private final ArrayList<SecurityControllerCallback> mCallbacks = new ArrayList<SecurityControllerCallback>(); - private SparseArray<Boolean> mCurrentVpnUsers = new SparseArray<>(); + private SparseArray<VpnConfig> mCurrentVpns = new SparseArray<>(); private int mCurrentUserId; public SecurityControllerImpl(Context context) { @@ -82,7 +83,16 @@ public class SecurityControllerImpl implements SecurityController { public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println("SecurityController state:"); - pw.print(" mCurrentVpnUsers=" + mCurrentVpnUsers); + pw.print(" mCurrentVpns={"); + for (int i = 0 ; i < mCurrentVpns.size(); i++) { + if (i > 0) { + pw.print(", "); + } + pw.print(mCurrentVpns.keyAt(i)); + pw.print('='); + pw.print(mCurrentVpns.valueAt(i).user); + } + pw.println("}"); } @Override @@ -97,11 +107,7 @@ public class SecurityControllerImpl implements SecurityController { @Override public boolean hasProfileOwner() { - boolean result = false; - for (UserInfo profile : mUserManager.getProfiles(mCurrentUserId)) { - result |= (mDevicePolicyManager.getProfileOwnerAsUser(profile.id) != null); - } - return result; + return mDevicePolicyManager.getProfileOwnerAsUser(mCurrentUserId) != null; } @Override @@ -116,8 +122,37 @@ public class SecurityControllerImpl implements SecurityController { } @Override + public String getPrimaryVpnName() { + VpnConfig cfg = mCurrentVpns.get(mCurrentUserId); + if (cfg != null) { + return getNameForVpnConfig(cfg, new UserHandle(mCurrentUserId)); + } else { + return null; + } + } + + @Override + public String getProfileVpnName() { + for (UserInfo profile : mUserManager.getProfiles(mCurrentUserId)) { + if (profile.id == mCurrentUserId) { + continue; + } + VpnConfig cfg = mCurrentVpns.get(profile.id); + if (cfg != null) { + return getNameForVpnConfig(cfg, profile.getUserHandle()); + } + } + return null; + } + + @Override public boolean isVpnEnabled() { - return mCurrentVpnUsers.get(mCurrentUserId) != null; + for (UserInfo profile : mUserManager.getProfiles(mCurrentUserId)) { + if (mCurrentVpns.get(profile.id) != null) { + return true; + } + } + return false; } @Override @@ -140,6 +175,22 @@ public class SecurityControllerImpl implements SecurityController { fireCallbacks(); } + private String getNameForVpnConfig(VpnConfig cfg, UserHandle user) { + if (cfg.legacy) { + return mContext.getString(R.string.legacy_vpn_name); + } + // The package name for an active VPN is stored in the 'user' field of its VpnConfig + final String vpnPackage = cfg.user; + try { + Context userContext = mContext.createPackageContextAsUser(mContext.getPackageName(), + 0 /* flags */, user); + return VpnConfig.getVpnLabel(userContext, vpnPackage).toString(); + } catch (NameNotFoundException nnfe) { + Log.e(TAG, "Package " + vpnPackage + " is not present", nnfe); + return null; + } + } + private void fireCallbacks() { for (SecurityControllerCallback callback : mCallbacks) { callback.onStateChanged(); @@ -148,21 +199,20 @@ public class SecurityControllerImpl implements SecurityController { private void updateState() { // Find all users with an active VPN - SparseArray<Boolean> vpnUsers = new SparseArray<>(); + SparseArray<VpnConfig> vpns = new SparseArray<>(); try { - for (VpnInfo vpn : mConnectivityManagerService.getAllVpnInfo()) { - UserInfo user = mUserManager.getUserInfo(UserHandle.getUserId(vpn.ownerUid)); - int groupId = (user.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID ? - user.profileGroupId : user.id); - - vpnUsers.put(groupId, Boolean.TRUE); + for (UserInfo user : mUserManager.getUsers()) { + VpnConfig cfg = mConnectivityManagerService.getVpnConfig(user.id); + if (cfg != null) { + vpns.put(user.id, cfg); + } } } catch (RemoteException rme) { // Roll back to previous state Log.e(TAG, "Unable to list active VPNs", rme); return; } - mCurrentVpnUsers = vpnUsers; + mCurrentVpns = vpns; } private final NetworkCallback mNetworkCallback = new NetworkCallback() { @@ -182,5 +232,4 @@ public class SecurityControllerImpl implements SecurityController { fireCallbacks(); }; }; - } diff --git a/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java b/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java index 9f593fc..1e0d440 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/QsTuner.java @@ -304,6 +304,16 @@ public class QsTuner extends Fragment implements Callback { } @Override + public String getPrimaryVpnName() { + return null; + } + + @Override + public String getProfileVpnName() { + return null; + } + + @Override public void onUserSwitched(int newUserId) { } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 44d00d7..b64a200 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2994,7 +2994,12 @@ public class ConnectivityService extends IConnectivityManager.Stub throwIfLockdownEnabled(); synchronized(mVpns) { - return mVpns.get(userId).prepare(oldPackage, newPackage); + Vpn vpn = mVpns.get(userId); + if (vpn != null) { + return vpn.prepare(oldPackage, newPackage); + } else { + return false; + } } } @@ -3016,7 +3021,10 @@ public class ConnectivityService extends IConnectivityManager.Stub enforceCrossUserPermission(userId); synchronized(mVpns) { - mVpns.get(userId).setPackageAuthorization(packageName, authorized); + Vpn vpn = mVpns.get(userId); + if (vpn != null) { + vpn.setPackageAuthorization(packageName, authorized); + } } } @@ -3127,7 +3135,12 @@ public class ConnectivityService extends IConnectivityManager.Stub public VpnConfig getVpnConfig(int userId) { enforceCrossUserPermission(userId); synchronized(mVpns) { - return mVpns.get(userId).getVpnConfig(); + Vpn vpn = mVpns.get(userId); + if (vpn != null) { + return vpn.getVpnConfig(); + } else { + return null; + } } } |