Add disabled by policy empty views to more screens.

Bug: 27214401
Change-Id: I6cd4292a63610671070bf2134105e9e348c3ab32
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 084f25a..8ae5888 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -76,7 +76,6 @@
 import android.webkit.IWebViewUpdateService;
 import android.webkit.WebViewProviderInfo;
 import android.widget.Switch;
-import android.widget.TextView;
 import android.widget.Toast;
 
 import com.android.internal.app.LocalePicker;
@@ -95,7 +94,7 @@
 /*
  * Displays preferences for application developers.
  */
-public class DevelopmentSettings extends SettingsPreferenceFragment
+public class DevelopmentSettings extends RestrictedSettingsFragment
         implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
                 OnPreferenceChangeListener, SwitchBar.OnSwitchChangeListener, Indexable {
     private static final String TAG = "DevelopmentSettings";
@@ -317,6 +316,10 @@
     private Dialog mAdbKeysDialog;
     private boolean mUnavailable;
 
+    public DevelopmentSettings() {
+        super(UserManager.DISALLOW_DEBUGGING_FEATURES);
+    }
+
     @Override
     protected int getMetricsCategory() {
         return MetricsEvent.DEVELOPMENT;
@@ -337,8 +340,8 @@
 
         mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
 
-        if (!mUm.isAdminUser()
-                || mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)
+        setIfOnlyAvailableForAdmins(true);
+        if (isUiRestricted()
                 || Settings.Global.getInt(getActivity().getContentResolver(),
                         Settings.Global.DEVICE_PROVISIONED, 0) == 0) {
             // Block access to developer options if the user is not the owner, if user policy
@@ -582,11 +585,10 @@
 
         if (mUnavailable) {
             // Show error message
-            TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
-            setEmptyView(emptyView);
-            if (emptyView != null) {
-                emptyView.setText(R.string.development_settings_not_available);
+            if (!isUiRestrictedByOnlyAdmin()) {
+                getEmptyTextView().setText(R.string.development_settings_not_available);
             }
+            getPreferenceScreen().removeAll();
             return;
         }
 
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 5e8baac..75a4d67 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -41,9 +41,12 @@
 import android.widget.TextView;
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.settingslib.RestrictedLockUtils;
 
 import java.util.List;
 
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
 /**
  * Confirm and execute a reset of the device to a clean "just out of the box"
  * state.  Multiple confirmations are required: first, a general "are you sure
@@ -280,10 +283,17 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
+        final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
+                getActivity(), UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId());
         final UserManager um = UserManager.get(getActivity());
-        if (!um.isAdminUser()
-                || um.hasUserRestriction(UserManager.DISALLOW_FACTORY_RESET)) {
+        if (!um.isAdminUser() || RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
+                UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId())) {
             return inflater.inflate(R.layout.master_clear_disallowed_screen, null);
+        } else if (admin != null) {
+            View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
+            ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
+            view.setVisibility(View.VISIBLE);
+            return view;
         }
 
         mContentView = inflater.inflate(R.layout.master_clear, null);
diff --git a/src/com/android/settings/MasterClearConfirm.java b/src/com/android/settings/MasterClearConfirm.java
index 697c5c9..7c14bad 100644
--- a/src/com/android/settings/MasterClearConfirm.java
+++ b/src/com/android/settings/MasterClearConfirm.java
@@ -22,6 +22,7 @@
 import android.content.pm.ActivityInfo;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
 import android.service.persistentdata.PersistentDataBlockManager;
@@ -32,6 +33,9 @@
 import android.widget.TextView;
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
+import com.android.settingslib.RestrictedLockUtils;
+
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 /**
  * Confirm and execute a reset of the device to a clean "just out of the box"
@@ -136,9 +140,16 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        if (UserManager.get(getActivity()).hasUserRestriction(
-                UserManager.DISALLOW_FACTORY_RESET)) {
+        final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
+                getActivity(), UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId());
+        if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
+                UserManager.DISALLOW_FACTORY_RESET, UserHandle.myUserId())) {
             return inflater.inflate(R.layout.master_clear_disallowed_screen, null);
+        } else if (admin != null) {
+            View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
+            ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
+            view.setVisibility(View.VISIBLE);
+            return view;
         }
         mContentView = inflater.inflate(R.layout.master_clear_confirm, null);
         establishFinalConfirmationState();
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index 18bd4f0..fe12924 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -20,6 +20,7 @@
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
@@ -33,10 +34,13 @@
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.settingslib.RestrictedLockUtils;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
 /**
  * Confirm and execute a reset of the device's network settings to a clean "just out of the box"
  * state.  Multiple confirmations are required: first, a general "are you sure you want to do this?"
@@ -180,9 +184,16 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         final UserManager um = UserManager.get(getActivity());
-        if (!um.isAdminUser()
-                || um.hasUserRestriction(UserManager.DISALLOW_NETWORK_RESET)) {
+        final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
+                getActivity(), UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId());
+        if (!um.isAdminUser() || RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
+                UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
             return inflater.inflate(R.layout.network_reset_disallowed_screen, null);
+        } else if (admin != null) {
+            View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
+            ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
+            view.setVisibility(View.VISIBLE);
+            return view;
         }
 
         mContentView = inflater.inflate(R.layout.reset_network, null);
diff --git a/src/com/android/settings/ResetNetworkConfirm.java b/src/com/android/settings/ResetNetworkConfirm.java
index ad98bab..777f4d4 100644
--- a/src/com/android/settings/ResetNetworkConfirm.java
+++ b/src/com/android/settings/ResetNetworkConfirm.java
@@ -22,6 +22,7 @@
 import android.net.NetworkPolicyManager;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
@@ -34,6 +35,9 @@
 import com.android.ims.ImsManager;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.settingslib.RestrictedLockUtils;
+
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 
 /**
  * Confirm and execute a reset of the network settings to a clean "just out of the box"
@@ -113,9 +117,16 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        if (UserManager.get(getActivity()).hasUserRestriction(
-                UserManager.DISALLOW_NETWORK_RESET)) {
+        final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
+                getActivity(), UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId());
+        if (RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
+                UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId())) {
             return inflater.inflate(R.layout.network_reset_disallowed_screen, null);
+        } else if (admin != null) {
+            View view = inflater.inflate(R.layout.admin_support_details_empty_view, null);
+            ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(), view, admin, false);
+            view.setVisibility(View.VISIBLE);
+            return view;
         }
         mContentView = inflater.inflate(R.layout.reset_network_confirm, null);
         establishFinalConfirmationState();
diff --git a/src/com/android/settings/RestrictedSettingsFragment.java b/src/com/android/settings/RestrictedSettingsFragment.java
index ee7b6e7..0f2c033 100644
--- a/src/com/android/settings/RestrictedSettingsFragment.java
+++ b/src/com/android/settings/RestrictedSettingsFragment.java
@@ -27,6 +27,7 @@
 import android.os.PersistableBundle;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.view.Gravity;
 import android.view.View;
 import android.widget.TextView;
 
@@ -69,6 +70,9 @@
     private EnforcedAdmin mEnforcedAdmin;
     private TextView mEmptyTextView;
 
+    private boolean mOnlyAvailableForAdmins = false;
+    private boolean mIsAdminUser;
+
     // Receiver to clear pin status when the screen is turned off.
     private BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
         @Override
@@ -96,6 +100,7 @@
 
         mRestrictionsManager = (RestrictionsManager) getSystemService(Context.RESTRICTIONS_SERVICE);
         mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
+        mIsAdminUser = mUserManager.isAdminUser();
 
         if (icicle != null) {
             mChallengeSucceeded = icicle.getBoolean(KEY_CHALLENGE_SUCCEEDED, false);
@@ -198,26 +203,24 @@
         return restricted && mRestrictionsManager.hasRestrictionsProvider();
     }
 
-    protected View initAdminSupportDetailsView() {
-        return null;
+    private View initAdminSupportDetailsView() {
+        return getActivity().findViewById(R.id.admin_support_details);
     }
 
     protected TextView initEmptyTextView() {
-        return null;
+        TextView emptyView = (TextView) getActivity().findViewById(android.R.id.empty);
+        emptyView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
+        return emptyView;
     }
 
     private void updateAdminSupportDetailsView() {
-        mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
-                mRestrictionKey, UserHandle.myUserId());
-        if (mEnforcedAdmin != null) {
+        final EnforcedAdmin admin = getRestrictionEnforcedAdmin();
+        if (admin != null) {
             final Activity activity = getActivity();
             DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService(
                     Context.DEVICE_POLICY_SERVICE);
-            if (mEnforcedAdmin.userId == UserHandle.USER_NULL) {
-                mEnforcedAdmin.userId = UserHandle.myUserId();
-            }
             CharSequence supportMessage = dpm.getShortSupportMessageForUser(
-                    mEnforcedAdmin.component, mEnforcedAdmin.userId);
+                    admin.component, admin.userId);
             if (supportMessage != null) {
                 TextView textView = (TextView) activity.findViewById(R.id.admin_support_msg);
                 textView.setText(supportMessage);
@@ -226,6 +229,15 @@
         }
     }
 
+    public EnforcedAdmin getRestrictionEnforcedAdmin() {
+        mEnforcedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
+                mRestrictionKey, UserHandle.myUserId());
+        if (mEnforcedAdmin != null && mEnforcedAdmin.userId == UserHandle.USER_NULL) {
+            mEnforcedAdmin.userId = UserHandle.myUserId();
+        }
+        return mEnforcedAdmin;
+    }
+
     @Override
     public void onClick(View view) {
         Intent intent = new Intent();
@@ -252,7 +264,9 @@
     protected void onDataSetChanged() {
         highlightPreferenceIfNeeded();
         if (mAdminSupportDetails != null && isUiRestrictedByOnlyAdmin()) {
-            updateAdminSupportDetailsView();
+            final EnforcedAdmin admin = getRestrictionEnforcedAdmin();
+            ShowAdminSupportDetailsDialog.setAdminSupportDetails(getActivity(),
+                    mAdminSupportDetails, admin, false);
             setEmptyView(mAdminSupportDetails);
         } else if (mEmptyTextView != null) {
             setEmptyView(mEmptyTextView);
@@ -260,15 +274,20 @@
         super.onDataSetChanged();
     }
 
+    public void setIfOnlyAvailableForAdmins(boolean onlyForAdmins) {
+        mOnlyAvailableForAdmins = onlyForAdmins;
+    }
+
     /**
      * Returns whether restricted or actionable UI elements should be removed or disabled.
      */
     protected boolean isUiRestricted() {
-        return isRestrictedAndNotProviderProtected() || !hasChallengeSucceeded();
+        return isRestrictedAndNotProviderProtected() || !hasChallengeSucceeded()
+                || (!mIsAdminUser && mOnlyAvailableForAdmins);
     }
 
     protected boolean isUiRestrictedByOnlyAdmin() {
         return isUiRestricted() && !mUserManager.hasBaseUserRestriction(mRestrictionKey,
-                UserHandle.of(UserHandle.myUserId()));
+                UserHandle.of(UserHandle.myUserId())) && (mIsAdminUser || !mOnlyAvailableForAdmins);
     }
 }
diff --git a/src/com/android/settings/ShowAdminSupportDetailsDialog.java b/src/com/android/settings/ShowAdminSupportDetailsDialog.java
index eccd9ea..f44c4b8 100644
--- a/src/com/android/settings/ShowAdminSupportDetailsDialog.java
+++ b/src/com/android/settings/ShowAdminSupportDetailsDialog.java
@@ -23,12 +23,14 @@
 import android.app.IActivityManager;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.util.Log;
@@ -58,7 +60,7 @@
 
         mDialogView = LayoutInflater.from(this).inflate(
                 R.layout.admin_support_details_dialog, null);
-        setAdminSupportDetails(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId);
+        setAdminSupportDetails(this, mDialogView, mEnforcedAdmin, true);
 
         new AlertDialog.Builder(this)
                 .setView(mDialogView)
@@ -73,7 +75,7 @@
         EnforcedAdmin admin = getAdminDetailsFromIntent(intent);
         if (!mEnforcedAdmin.equals(admin)) {
             mEnforcedAdmin = admin;
-            setAdminSupportDetails(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId);
+            setAdminSupportDetails(this, mDialogView, mEnforcedAdmin, true);
         }
     }
 
@@ -102,14 +104,8 @@
         return false;
     }
 
-    private void setAdminSupportDetails(View root, final ComponentName admin, final int userId) {
+    private void initializeDialogViews(View root, final ComponentName admin, int userId) {
         if (admin != null) {
-            CharSequence supportMessage = mDpm.getShortSupportMessageForUser(admin, userId);
-            if (supportMessage != null) {
-                TextView textView = (TextView) root.findViewById(R.id.admin_support_msg);
-                textView.setText(supportMessage);
-            }
-
             ActivityInfo ai = null;
             try {
                 ai = AppGlobals.getPackageManager().getReceiverInfo(admin, 0 /* flags */, userId);
@@ -125,25 +121,52 @@
             }
         }
 
+        setAdminSupportDetails(this, root, new EnforcedAdmin(admin, userId), true);
+    }
+
+    public static void setAdminSupportDetails(final Activity activity, View root,
+            final EnforcedAdmin enforcedAdmin, final boolean finishActivity) {
+        if (enforcedAdmin == null) {
+            return;
+        }
+        if (enforcedAdmin.component != null) {
+            DevicePolicyManager dpm = (DevicePolicyManager) activity.getSystemService(
+                    Context.DEVICE_POLICY_SERVICE);
+            if (enforcedAdmin.userId == UserHandle.USER_NULL) {
+                enforcedAdmin.userId = UserHandle.myUserId();
+            }
+            CharSequence supportMessage = null;
+            if (UserHandle.isSameApp(Process.myUid(), Process.SYSTEM_UID)) {
+                supportMessage = dpm.getShortSupportMessageForUser(
+                        enforcedAdmin.component, enforcedAdmin.userId);
+            }
+            if (supportMessage != null) {
+                TextView textView = (TextView) root.findViewById(R.id.admin_support_msg);
+                textView.setText(supportMessage);
+            }
+        }
+
         root.findViewById(R.id.admins_policies_list).setOnClickListener(
                 new View.OnClickListener() {
                     @Override
                     public void onClick(View view) {
                         Intent intent = new Intent();
-                        if (admin != null) {
-                            intent.setClass(ShowAdminSupportDetailsDialog.this,
-                                    DeviceAdminAdd.class);
-                            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, admin);
+                        if (enforcedAdmin.component != null) {
+                            intent.setClass(activity, DeviceAdminAdd.class);
+                            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
+                                    enforcedAdmin.component);
                             // DeviceAdminAdd class may need to run as managed profile.
-                            startActivityAsUser(intent, new UserHandle(userId));
+                            activity.startActivityAsUser(intent,
+                                    new UserHandle(enforcedAdmin.userId));
                         } else {
-                            intent.setClass(ShowAdminSupportDetailsDialog.this,
-                                    Settings.DeviceAdminSettingsActivity.class);
+                            intent.setClass(activity, Settings.DeviceAdminSettingsActivity.class);
                             // Activity merges both managed profile and parent users
                             // admins so show as same user as this activity.
-                            startActivity(intent);
+                            activity.startActivity(intent);
                         }
-                        finish();
+                        if (finishActivity) {
+                            activity.finish();
+                        }
                     }
                 });
     }
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 3aa72d2..0338020 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -42,7 +42,6 @@
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceScreen;
-import android.widget.TextView;
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.wifi.WifiApDialog;
@@ -56,7 +55,7 @@
 /*
  * Displays preferences for Tethering.
  */
-public class TetherSettings extends SettingsPreferenceFragment
+public class TetherSettings extends RestrictedSettingsFragment
         implements DialogInterface.OnClickListener, Preference.OnPreferenceChangeListener {
 
     private static final String USB_TETHER_SETTINGS = "usb_tether_settings";
@@ -94,7 +93,6 @@
     private WifiApDialog mDialog;
     private WifiManager mWifiManager;
     private WifiConfiguration mWifiConfig = null;
-    private UserManager mUm;
     private ConnectivityManager mCm;
 
     private boolean mUsbConnected;
@@ -113,16 +111,18 @@
         return MetricsEvent.TETHER;
     }
 
+    public TetherSettings() {
+        super(UserManager.DISALLOW_CONFIG_TETHERING);
+    }
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
         addPreferencesFromResource(R.xml.tether_prefs);
 
-        mUm = (UserManager) getSystemService(Context.USER_SERVICE);
-
-        if (mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING)
-                || !mUm.isAdminUser()) {
+        setIfOnlyAvailableForAdmins(true);
+        if (isUiRestricted()) {
             mUnavailable = true;
             setPreferenceScreen(new PreferenceScreen(getPrefContext(), null));
             return;
@@ -259,11 +259,10 @@
         super.onStart();
 
         if (mUnavailable) {
-            TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
-            setEmptyView(emptyView);
-            if (emptyView != null) {
-                emptyView.setText(R.string.tethering_settings_not_available);
+            if (!isUiRestrictedByOnlyAdmin()) {
+                getEmptyTextView().setText(R.string.tethering_settings_not_available);
             }
+            getPreferenceScreen().removeAll();
             return;
         }
 
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index e639005..9aa14fc 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -34,7 +34,6 @@
 import android.text.Spannable;
 import android.text.style.TextAppearanceSpan;
 import android.util.Log;
-import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -379,18 +378,6 @@
         }
     }
 
-    @Override
-    protected TextView initEmptyTextView() {
-        TextView textView = (TextView) getView().findViewById(android.R.id.empty);
-        textView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
-        return textView;
-    }
-
-    @Override
-    protected View initAdminSupportDetailsView() {
-        return getActivity().findViewById(R.id.admin_support_details);
-    }
-
     private void setOffMessage() {
         final TextView emptyView = getEmptyTextView();
         if (emptyView == null) {
diff --git a/src/com/android/settings/notification/ZenModeSettingsBase.java b/src/com/android/settings/notification/ZenModeSettingsBase.java
index 86d07be..ec1426d 100644
--- a/src/com/android/settings/notification/ZenModeSettingsBase.java
+++ b/src/com/android/settings/notification/ZenModeSettingsBase.java
@@ -28,9 +28,7 @@
 import android.provider.Settings.Global;
 import android.service.notification.ZenModeConfig;
 import android.util.Log;
-import android.view.View;
 
-import com.android.settings.R;
 import com.android.settings.RestrictedSettingsFragment;
 
 import java.util.List;
@@ -79,11 +77,6 @@
     }
 
     @Override
-    protected View initAdminSupportDetailsView() {
-        return getActivity().findViewById(R.id.admin_support_details);
-    }
-
-    @Override
     public void onPause() {
         super.onPause();
         mSettingsObserver.unregister();
diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java
index 4cbb3df..6f56b06 100644
--- a/src/com/android/settings/vpn2/VpnSettings.java
+++ b/src/com/android/settings/vpn2/VpnSettings.java
@@ -49,7 +49,6 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.TextView;
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.internal.net.LegacyVpnInfo;
@@ -57,7 +56,8 @@
 import com.android.internal.net.VpnProfile;
 import com.android.internal.util.ArrayUtils;
 import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.RestrictedSettingsFragment;
+import com.android.settingslib.RestrictedLockUtils;
 import com.google.android.collect.Lists;
 
 import java.util.ArrayList;
@@ -72,7 +72,7 @@
  * Settings screen listing VPNs. Configured VPNs and networks managed by apps
  * are shown in the same list.
  */
-public class VpnSettings extends SettingsPreferenceFragment implements
+public class VpnSettings extends RestrictedSettingsFragment implements
         Handler.Callback, Preference.OnPreferenceClickListener {
     private static final String LOG_TAG = "VpnSettings";
 
@@ -101,6 +101,10 @@
 
     private boolean mUnavailable;
 
+    public VpnSettings() {
+        super(UserManager.DISALLOW_CONFIG_VPN);
+    }
+
     @Override
     protected int getMetricsCategory() {
         return MetricsEvent.VPN;
@@ -111,7 +115,7 @@
         super.onCreate(savedState);
 
         mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
-        if (mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_VPN)) {
+        if (isUiRestricted()) {
             mUnavailable = true;
             setPreferenceScreen(new PreferenceScreen(getPrefContext(), null));
             setHasOptionsMenu(false);
@@ -136,7 +140,12 @@
 
         // Disable all actions if VPN configuration has been disallowed
         for (int i = 0; i < menu.size(); i++) {
-            menu.getItem(i).setEnabled(!mUnavailable);
+            if (isUiRestrictedByOnlyAdmin()) {
+                RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getPrefContext(),
+                        menu.getItem(i), getRestrictionEnforcedAdmin());
+            } else {
+                menu.getItem(i).setEnabled(!mUnavailable);
+            }
         }
 
         // Hide lockdown VPN on devices that require IMS authentication
@@ -172,11 +181,10 @@
 
         if (mUnavailable) {
             // Show a message to explain that VPN settings have been disabled
-            TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
-            setEmptyView(emptyView);
-            if (emptyView != null) {
-                emptyView.setText(R.string.vpn_settings_not_available);
+            if (!isUiRestrictedByOnlyAdmin()) {
+                getEmptyTextView().setText(R.string.vpn_settings_not_available);
             }
+            getPreferenceScreen().removeAll();
             return;
         }
 
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index b7a0f81..12e5c54 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -54,7 +54,6 @@
 import android.util.TypedValue;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
-import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -721,18 +720,6 @@
         }
     }
 
-    @Override
-    protected TextView initEmptyTextView() {
-        TextView emptyView = (TextView) getActivity().findViewById(android.R.id.empty);
-        emptyView.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
-        return emptyView;
-    }
-
-    @Override
-    protected View initAdminSupportDetailsView() {
-        return getActivity().findViewById(R.id.admin_support_details);
-    }
-
     private void setOffMessage() {
         if (isUiRestricted()) {
             if (!isUiRestrictedByOnlyAdmin()) {