Respect DISALLOW_CONFIG_VPN for disconnect dialog

Change-Id: Idfe3899e81eec5efdbd5700bdc65921de6853898
Fix: 29265163
This commit is contained in:
Robin Lee
2016-06-13 14:19:44 +01:00
parent 1a1f6b0b1b
commit 49be1c1b06

View File

@@ -28,6 +28,7 @@ import android.os.Bundle;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager;
import android.util.Log; import android.util.Log;
import com.android.internal.net.VpnConfig; import com.android.internal.net.VpnConfig;
@@ -48,6 +49,7 @@ public class AppDialogFragment extends DialogFragment implements AppDialog.Liste
private PackageInfo mPackageInfo; private PackageInfo mPackageInfo;
private Listener mListener; private Listener mListener;
private UserManager mUserManager;
private final IConnectivityManager mService = IConnectivityManager.Stub.asInterface( private final IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
@@ -79,6 +81,12 @@ public class AppDialogFragment extends DialogFragment implements AppDialog.Liste
frag.show(parent.getFragmentManager(), TAG_APP_DIALOG); frag.show(parent.getFragmentManager(), TAG_APP_DIALOG);
} }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserManager = UserManager.get(getContext());
}
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle args = getArguments(); Bundle args = getArguments();
@@ -96,7 +104,7 @@ public class AppDialogFragment extends DialogFragment implements AppDialog.Liste
.setMessage(getActivity().getString(R.string.vpn_disconnect_confirm)) .setMessage(getActivity().getString(R.string.vpn_disconnect_confirm))
.setNegativeButton(getActivity().getString(R.string.vpn_cancel), null); .setNegativeButton(getActivity().getString(R.string.vpn_cancel), null);
if (connected) { if (connected && !isUiRestricted()) {
dlog.setPositiveButton(getActivity().getString(R.string.vpn_disconnect), dlog.setPositiveButton(getActivity().getString(R.string.vpn_disconnect),
new DialogInterface.OnClickListener() { new DialogInterface.OnClickListener() {
@Override @Override
@@ -120,7 +128,10 @@ public class AppDialogFragment extends DialogFragment implements AppDialog.Liste
@Override @Override
public void onForget(final DialogInterface dialog) { public void onForget(final DialogInterface dialog) {
final int userId = UserHandle.getUserId(mPackageInfo.applicationInfo.uid); if (isUiRestricted()) {
return;
}
final int userId = getUserId();
try { try {
mService.setVpnPackageAuthorization(mPackageInfo.packageName, userId, false); mService.setVpnPackageAuthorization(mPackageInfo.packageName, userId, false);
onDisconnect(dialog); onDisconnect(dialog);
@@ -135,7 +146,10 @@ public class AppDialogFragment extends DialogFragment implements AppDialog.Liste
} }
private void onDisconnect(final DialogInterface dialog) { private void onDisconnect(final DialogInterface dialog) {
final int userId = UserHandle.getUserId(mPackageInfo.applicationInfo.uid); if (isUiRestricted()) {
return;
}
final int userId = getUserId();
try { try {
if (mPackageInfo.packageName.equals(getConnectedPackage(mService, userId))) { if (mPackageInfo.packageName.equals(getConnectedPackage(mService, userId))) {
mService.setAlwaysOnVpnPackage(userId, null, /* lockdownEnabled */ false); mService.setAlwaysOnVpnPackage(userId, null, /* lockdownEnabled */ false);
@@ -147,6 +161,15 @@ public class AppDialogFragment extends DialogFragment implements AppDialog.Liste
} }
} }
private boolean isUiRestricted() {
final UserHandle userHandle = UserHandle.of(getUserId());
return mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN, userHandle);
}
private int getUserId() {
return UserHandle.getUserId(mPackageInfo.applicationInfo.uid);
}
private static String getConnectedPackage(IConnectivityManager service, final int userId) private static String getConnectedPackage(IConnectivityManager service, final int userId)
throws RemoteException { throws RemoteException {
final VpnConfig config = service.getVpnConfig(userId); final VpnConfig config = service.getVpnConfig(userId);