diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index c33f603..004e89c 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -25,6 +25,7 @@
 import android.os.Parcelable;
 import android.support.annotation.ColorInt;
 import android.support.annotation.StringRes;
+import android.support.annotation.VisibleForTesting;
 import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
 import android.text.style.TextAppearanceSpan;
@@ -132,6 +133,17 @@
                 (switchView, isChecked) -> setTextViewLabelAndBackground(isChecked));
 
         mRestrictedIcon = findViewById(R.id.restricted_icon);
+        mRestrictedIcon.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mDisabledByAdmin) {
+                    mMetricsFeatureProvider.count(mContext,
+                        mMetricsTag + "/switch_bar|restricted", 1);
+                    RestrictedLockUtils.sendShowAdminSupportDetailsIntent(context,
+                        mEnforcedAdmin);
+                }
+            }
+        });
 
         // Default is hide
         setVisibility(View.GONE);
@@ -196,6 +208,11 @@
         mSwitch.setEnabled(enabled);
     }
 
+    @VisibleForTesting
+    View getDelegatingView() {
+        return mDisabledByAdmin ? mRestrictedIcon : mSwitch;
+    }
+
     /**
      * If admin is not null, disables the text and switch but keeps the view clickable.
      * Otherwise, calls setEnabled which will enables the entire view including
@@ -216,6 +233,8 @@
             mRestrictedIcon.setVisibility(View.GONE);
             setEnabled(true);
         }
+        setTouchDelegate(new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()),
+            getDelegatingView()));
     }
 
     public final ToggleSwitch getSwitch() {
@@ -228,7 +247,8 @@
             mSwitch.setOnCheckedChangeListener(this);
             // Make the entire bar work as a switch
             post(() -> setTouchDelegate(
-                    new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()), mSwitch)));
+                    new TouchDelegate(new Rect(0, 0, getWidth(), getHeight()),
+                        getDelegatingView())));
         }
     }
 
@@ -242,7 +262,8 @@
     @Override
     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
         if ((w > 0) && (h > 0)) {
-            setTouchDelegate(new TouchDelegate(new Rect(0, 0, w, h), mSwitch));
+            setTouchDelegate(new TouchDelegate(new Rect(0, 0, w, h),
+                getDelegatingView()));
         }
     }
 
diff --git a/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java b/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java
index bd99bbb..818daec 100644
--- a/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SwitchBarTest.java
@@ -26,6 +26,7 @@
 import com.android.settings.R;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -82,4 +83,16 @@
         assertThat(((TextView) mBar.findViewById(R.id.switch_text)).getText())
                 .isEqualTo(mContext.getString(onText));
     }
+
+    @Test
+    public void disabledByAdmin_shouldDelegateToRestrictedIcon() {
+        mBar.setDisabledByAdmin(new EnforcedAdmin());
+        assertThat(mBar.getDelegatingView().getId()).isEqualTo(R.id.restricted_icon);
+    }
+
+    @Test
+    public void notDisabledByAdmin_shouldDelegateToSwitch() {
+        mBar.setDisabledByAdmin(null);
+        assertThat(mBar.getDelegatingView().getId()).isEqualTo(R.id.switch_widget);
+    }
 }
