Respect DISALLOW_CONFIG_VPN for disconnect dialog
Change-Id: Idfe3899e81eec5efdbd5700bdc65921de6853898 Fix: 29265163
This commit is contained in:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user