packages/apps/Settings
Revision | 2fa818c8db55b2c9c409c9e01ebbead088956ae5 (tree) |
---|---|
Zeit | 2021-04-07 07:05:36 |
Autor | android-build-team Robot <android-build-team-robot@goog...> |
Commiter | android-build-team Robot |
Snap for 7262953 from ec2f5b30a3d8f46874debd22c8864349c79e3a36 to rvc-d2-release
Change-Id: Id62b4ea20d1430ad7e8677cf364f8cfe7317aa76
@@ -207,6 +207,7 @@ public class DeviceAdminListPreferenceController extends BasePreferenceControlle | ||
207 | 207 | return true; |
208 | 208 | }); |
209 | 209 | pref.setOnPreferenceChangeListener((preference, newValue) -> false); |
210 | + pref.setSingleLineTitle(true); | |
210 | 211 | } |
211 | 212 | |
212 | 213 | /** |
@@ -17,6 +17,7 @@ | ||
17 | 17 | package com.android.settings.vpn2; |
18 | 18 | |
19 | 19 | import android.app.Dialog; |
20 | +import android.app.admin.DevicePolicyManager; | |
20 | 21 | import android.app.settings.SettingsEnums; |
21 | 22 | import android.content.Context; |
22 | 23 | import android.content.DialogInterface; |
@@ -55,6 +56,7 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App | ||
55 | 56 | private UserManager mUserManager; |
56 | 57 | private final IConnectivityManager mService = IConnectivityManager.Stub.asInterface( |
57 | 58 | ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); |
59 | + private DevicePolicyManager mDevicePolicyManager; | |
58 | 60 | |
59 | 61 | @Override |
60 | 62 | public int getMetricsCategory() { |
@@ -97,7 +99,11 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App | ||
97 | 99 | @Override |
98 | 100 | public void onCreate(Bundle savedInstanceState) { |
99 | 101 | super.onCreate(savedInstanceState); |
102 | + mPackageInfo = getArguments().getParcelable(ARG_PACKAGE); | |
100 | 103 | mUserManager = UserManager.get(getContext()); |
104 | + mDevicePolicyManager = getContext() | |
105 | + .createContextAsUser(UserHandle.of(getUserId()), /* flags= */ 0) | |
106 | + .getSystemService(DevicePolicyManager.class); | |
101 | 107 | } |
102 | 108 | |
103 | 109 | @Override |
@@ -106,7 +112,6 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App | ||
106 | 112 | final String label = args.getString(ARG_LABEL); |
107 | 113 | boolean managing = args.getBoolean(ARG_MANAGING); |
108 | 114 | boolean connected = args.getBoolean(ARG_CONNECTED); |
109 | - mPackageInfo = args.getParcelable(ARG_PACKAGE); | |
110 | 115 | |
111 | 116 | if (managing) { |
112 | 117 | return new AppDialog(getActivity(), this, mPackageInfo, label); |
@@ -178,7 +183,10 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App | ||
178 | 183 | |
179 | 184 | private boolean isUiRestricted() { |
180 | 185 | final UserHandle userHandle = UserHandle.of(getUserId()); |
181 | - return mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN, userHandle); | |
186 | + if (mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN, userHandle)) { | |
187 | + return true; | |
188 | + } | |
189 | + return mPackageInfo.packageName.equals(mDevicePolicyManager.getAlwaysOnVpnPackage()); | |
182 | 190 | } |
183 | 191 | |
184 | 192 | private int getUserId() { |
@@ -16,6 +16,7 @@ | ||
16 | 16 | |
17 | 17 | package com.android.settings.vpn2; |
18 | 18 | |
19 | +import android.app.admin.DevicePolicyManager; | |
19 | 20 | import android.content.Context; |
20 | 21 | import android.content.pm.PackageInfo; |
21 | 22 | import android.content.pm.PackageManager; |
@@ -26,6 +27,8 @@ import androidx.preference.Preference; | ||
26 | 27 | |
27 | 28 | import com.android.internal.net.LegacyVpnInfo; |
28 | 29 | import com.android.internal.net.VpnConfig; |
30 | +import com.android.settingslib.RestrictedLockUtils; | |
31 | +import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; | |
29 | 32 | |
30 | 33 | /** |
31 | 34 | * {@link androidx.preference.Preference} containing information about a VPN |
@@ -43,6 +46,7 @@ public class AppPreference extends ManageablePreference { | ||
43 | 46 | super.setUserId(userId); |
44 | 47 | |
45 | 48 | mPackageName = packageName; |
49 | + disableIfConfiguredByAdmin(); | |
46 | 50 | |
47 | 51 | // Fetch icon and VPN label |
48 | 52 | String label = packageName; |
@@ -74,6 +78,25 @@ public class AppPreference extends ManageablePreference { | ||
74 | 78 | setIcon(icon); |
75 | 79 | } |
76 | 80 | |
81 | + /** | |
82 | + * Disable this preference if VPN is set as always on by a profile or device owner. | |
83 | + * NB: it should be called after super.setUserId() otherwise admin information can be lost. | |
84 | + */ | |
85 | + private void disableIfConfiguredByAdmin() { | |
86 | + if (isDisabledByAdmin()) { | |
87 | + // Already disabled due to user restriction. | |
88 | + return; | |
89 | + } | |
90 | + final DevicePolicyManager dpm = getContext() | |
91 | + .createContextAsUser(UserHandle.of(getUserId()), /* flags= */ 0) | |
92 | + .getSystemService(DevicePolicyManager.class); | |
93 | + if (mPackageName.equals(dpm.getAlwaysOnVpnPackage())) { | |
94 | + final EnforcedAdmin admin = RestrictedLockUtils.getProfileOrDeviceOwner( | |
95 | + getContext(), UserHandle.of(mUserId)); | |
96 | + setDisabledByAdmin(admin); | |
97 | + } | |
98 | + } | |
99 | + | |
77 | 100 | public PackageInfo getPackageInfo() { |
78 | 101 | try { |
79 | 102 | PackageManager pm = getUserContext().getPackageManager(); |
@@ -47,7 +47,6 @@ public class FilterTouchesSwitchPreference extends SwitchPreference { | ||
47 | 47 | |
48 | 48 | @Override |
49 | 49 | public void onBindViewHolder(PreferenceViewHolder holder) { |
50 | - setSingleLineTitle(true); | |
51 | 50 | super.onBindViewHolder(holder); |
52 | 51 | final View switchView = holder.findViewById(android.R.id.switch_widget); |
53 | 52 | if (switchView != null) { |