diff --git a/src/com/android/settings/password/SetupChooseLockPassword.java b/src/com/android/settings/password/SetupChooseLockPassword.java
index 0b21129..2988f52 100644
--- a/src/com/android/settings/password/SetupChooseLockPassword.java
+++ b/src/com/android/settings/password/SetupChooseLockPassword.java
@@ -18,10 +18,12 @@
 
 import android.app.Activity;
 import android.app.Fragment;
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
+import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.LinearLayout;
@@ -43,6 +45,8 @@
  */
 public class SetupChooseLockPassword extends ChooseLockPassword {
 
+    private static final String TAG = "SetupChooseLockPassword";
+
     public static Intent modifyIntentForSetup(
             Context context,
             Intent chooseLockPasswordIntent) {
@@ -87,9 +91,19 @@
                 mCancelButton.setText(R.string.skip_label);
             }
 
-            boolean showOptionsButton = getActivity().getIntent().getBooleanExtra(
+            final Activity activity = getActivity();
+            ChooseLockGenericController chooseLockGenericController =
+                    new ChooseLockGenericController(activity, mUserId);
+            boolean anyOptionsShown = chooseLockGenericController.getVisibleScreenLockTypes(
+                    DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, false).size() > 0;
+            boolean showOptionsButton = activity.getIntent().getBooleanExtra(
                     ChooseLockGenericFragment.EXTRA_SHOW_OPTIONS_BUTTON, false);
-            if (showOptionsButton) {
+
+            if (!anyOptionsShown) {
+                Log.w(TAG, "Visible screen lock types is empty!");
+            }
+
+            if (showOptionsButton && anyOptionsShown) {
                 mOptionsButton = view.findViewById(R.id.screen_lock_options);
                 mOptionsButton.setVisibility(View.VISIBLE);
                 mOptionsButton.setOnClickListener(this);
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
index 5f4c16a..3e9c39c 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPasswordTest.java
@@ -24,6 +24,7 @@
 import android.app.AlertDialog;
 import android.content.Intent;
 import android.os.Bundle;
+import android.view.View;
 import android.widget.Button;
 
 import com.android.settings.R;
@@ -42,11 +43,16 @@
 import org.robolectric.Robolectric;
 import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
 import org.robolectric.shadows.ShadowActivity;
 import org.robolectric.shadows.ShadowActivity.IntentForResult;
 import org.robolectric.shadows.ShadowAlertDialog;
 import org.robolectric.shadows.ShadowDialog;
 
+import java.util.Collections;
+import java.util.List;
+
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(
         manifest = TestConfig.MANIFEST_PATH,
@@ -80,6 +86,15 @@
     }
 
     @Test
+    @Config(shadows = ShadowChooseLockGenericController.class)
+    public void createActivity_withShowOptionsButtonExtra_buttonNotVisibleIfNoVisibleLockTypes() {
+        SetupChooseLockPassword activity = createSetupChooseLockPassword();
+        Button optionsButton = activity.findViewById(R.id.screen_lock_options);
+        assertThat(optionsButton).isNotNull();
+        assertThat(optionsButton.getVisibility()).isEqualTo(View.GONE);
+    }
+
+    @Test
     public void allSecurityOptions_shouldBeShown_When_OptionsButtonIsClicked() {
         SetupChooseLockPassword activity = createSetupChooseLockPassword();
         activity.findViewById(R.id.screen_lock_options).performClick();
@@ -122,4 +137,13 @@
         intent.putExtra(ChooseLockGenericFragment.EXTRA_SHOW_OPTIONS_BUTTON, true);
         return Robolectric.buildActivity(SetupChooseLockPassword.class, intent).setup().get();
     }
+
+    @Implements(ChooseLockGenericController.class)
+    public static class ShadowChooseLockGenericController {
+        @Implementation
+        public List<ScreenLockType> getVisibleScreenLockTypes(int quality,
+                boolean includeDisabled) {
+            return Collections.emptyList();
+        }
+    }
 }
