diff --git a/src/com/android/settings/password/SetupChooseLockPassword.java b/src/com/android/settings/password/SetupChooseLockPassword.java index 0b211298503..2988f52b7b7 100644 --- a/src/com/android/settings/password/SetupChooseLockPassword.java +++ b/src/com/android/settings/password/SetupChooseLockPassword.java @@ -18,10 +18,12 @@ package com.android.settings.password; 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 @@ import com.android.setupwizardlib.util.WizardManagerHelper; */ public class SetupChooseLockPassword extends ChooseLockPassword { + private static final String TAG = "SetupChooseLockPassword"; + public static Intent modifyIntentForSetup( Context context, Intent chooseLockPasswordIntent) { @@ -87,9 +91,19 @@ public class SetupChooseLockPassword extends ChooseLockPassword { 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 5f4c16a03b7..3e9c39c2d1a 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 static org.robolectric.Shadows.shadowOf; 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.junit.runner.RunWith; 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, @@ -79,6 +85,15 @@ public class SetupChooseLockPasswordTest { assertThat(ShadowDialog.getLatestDialog()).isNotNull(); } + @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(); @@ -122,4 +137,13 @@ public class SetupChooseLockPasswordTest { 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 getVisibleScreenLockTypes(int quality, + boolean includeDisabled) { + return Collections.emptyList(); + } + } }