Settings UI fix for missing secure lock screen feature.
Bug: 123737250 Bug: 111072170 Bug: 111071972 Test: manual both with and without the feature flag Test: make RunSettingsRoboTests Change-Id: Iacefa95dce85d860633315e074cbf2772691cfdd
This commit is contained in:
@@ -238,8 +238,8 @@ public class ChooseLockGeneric extends SettingsActivity {
|
|||||||
UserManager.get(getActivity()),
|
UserManager.get(getActivity()),
|
||||||
getArguments(),
|
getArguments(),
|
||||||
getActivity().getIntent().getExtras()).getIdentifier();
|
getActivity().getIntent().getExtras()).getIdentifier();
|
||||||
mController =
|
mController = new ChooseLockGenericController(
|
||||||
new ChooseLockGenericController(getContext(), mUserId, mRequestedMinComplexity);
|
getContext(), mUserId, mRequestedMinComplexity, mLockPatternUtils);
|
||||||
if (ACTION_SET_NEW_PASSWORD.equals(chooseLockAction)
|
if (ACTION_SET_NEW_PASSWORD.equals(chooseLockAction)
|
||||||
&& UserManager.get(getActivity()).isManagedProfile(mUserId)
|
&& UserManager.get(getActivity()).isManagedProfile(mUserId)
|
||||||
&& mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId)) {
|
&& mLockPatternUtils.isSeparateProfileChallengeEnabled(mUserId)) {
|
||||||
|
@@ -27,6 +27,7 @@ import android.os.UserHandle;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -43,12 +44,14 @@ public class ChooseLockGenericController {
|
|||||||
@PasswordComplexity private final int mRequestedMinComplexity;
|
@PasswordComplexity private final int mRequestedMinComplexity;
|
||||||
private ManagedLockPasswordProvider mManagedPasswordProvider;
|
private ManagedLockPasswordProvider mManagedPasswordProvider;
|
||||||
private DevicePolicyManager mDpm;
|
private DevicePolicyManager mDpm;
|
||||||
|
private final LockPatternUtils mLockPatternUtils;
|
||||||
|
|
||||||
public ChooseLockGenericController(Context context, int userId) {
|
public ChooseLockGenericController(Context context, int userId) {
|
||||||
this(
|
this(
|
||||||
context,
|
context,
|
||||||
userId,
|
userId,
|
||||||
PASSWORD_COMPLEXITY_NONE);
|
PASSWORD_COMPLEXITY_NONE,
|
||||||
|
new LockPatternUtils(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,13 +59,14 @@ public class ChooseLockGenericController {
|
|||||||
* when determining the available screen lock types
|
* when determining the available screen lock types
|
||||||
*/
|
*/
|
||||||
public ChooseLockGenericController(Context context, int userId,
|
public ChooseLockGenericController(Context context, int userId,
|
||||||
@PasswordComplexity int requestedMinComplexity) {
|
@PasswordComplexity int requestedMinComplexity, LockPatternUtils lockPatternUtils) {
|
||||||
this(
|
this(
|
||||||
context,
|
context,
|
||||||
userId,
|
userId,
|
||||||
requestedMinComplexity,
|
requestedMinComplexity,
|
||||||
context.getSystemService(DevicePolicyManager.class),
|
context.getSystemService(DevicePolicyManager.class),
|
||||||
ManagedLockPasswordProvider.get(context, userId));
|
ManagedLockPasswordProvider.get(context, userId),
|
||||||
|
lockPatternUtils);
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -71,12 +75,14 @@ public class ChooseLockGenericController {
|
|||||||
int userId,
|
int userId,
|
||||||
@PasswordComplexity int requestedMinComplexity,
|
@PasswordComplexity int requestedMinComplexity,
|
||||||
DevicePolicyManager dpm,
|
DevicePolicyManager dpm,
|
||||||
ManagedLockPasswordProvider managedLockPasswordProvider) {
|
ManagedLockPasswordProvider managedLockPasswordProvider,
|
||||||
|
LockPatternUtils lockPatternUtils) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mUserId = userId;
|
mUserId = userId;
|
||||||
mRequestedMinComplexity = requestedMinComplexity;
|
mRequestedMinComplexity = requestedMinComplexity;
|
||||||
mManagedPasswordProvider = managedLockPasswordProvider;
|
mManagedPasswordProvider = managedLockPasswordProvider;
|
||||||
mDpm = dpm;
|
mDpm = dpm;
|
||||||
|
mLockPatternUtils = lockPatternUtils;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -105,6 +111,12 @@ public class ChooseLockGenericController {
|
|||||||
&& !managedProfile; // Swipe doesn't make sense for profiles.
|
&& !managedProfile; // Swipe doesn't make sense for profiles.
|
||||||
case MANAGED:
|
case MANAGED:
|
||||||
return mManagedPasswordProvider.isManagedPasswordChoosable();
|
return mManagedPasswordProvider.isManagedPasswordChoosable();
|
||||||
|
case PIN:
|
||||||
|
case PATTERN:
|
||||||
|
case PASSWORD:
|
||||||
|
// Hide the secure lock screen options if the device doesn't support the secure lock
|
||||||
|
// screen feature.
|
||||||
|
return mLockPatternUtils.hasSecureLockScreen();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,7 @@ import android.app.admin.DevicePolicyManager;
|
|||||||
import android.app.admin.DevicePolicyManager.PasswordComplexity;
|
import android.app.admin.DevicePolicyManager.PasswordComplexity;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
|
|
||||||
|
import com.android.internal.widget.LockPatternUtils;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||||
|
|
||||||
@@ -61,10 +62,14 @@ public class ChooseLockGenericControllerTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private DevicePolicyManager mDevicePolicyManager;
|
private DevicePolicyManager mDevicePolicyManager;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private LockPatternUtils mLockPatternUtils;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
|
when(mLockPatternUtils.hasSecureLockScreen()).thenReturn(true);
|
||||||
mController = createController(PASSWORD_COMPLEXITY_NONE);
|
mController = createController(PASSWORD_COMPLEXITY_NONE);
|
||||||
SettingsShadowResources.overrideResource(R.bool.config_hide_none_security_option, false);
|
SettingsShadowResources.overrideResource(R.bool.config_hide_none_security_option, false);
|
||||||
SettingsShadowResources.overrideResource(R.bool.config_hide_swipe_security_option, false);
|
SettingsShadowResources.overrideResource(R.bool.config_hide_swipe_security_option, false);
|
||||||
@@ -266,6 +271,7 @@ public class ChooseLockGenericControllerTest {
|
|||||||
0 /* userId */,
|
0 /* userId */,
|
||||||
minPasswordComplexity,
|
minPasswordComplexity,
|
||||||
mDevicePolicyManager,
|
mDevicePolicyManager,
|
||||||
mManagedLockPasswordProvider);
|
mManagedLockPasswordProvider,
|
||||||
|
mLockPatternUtils);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -33,6 +33,7 @@ import androidx.fragment.app.FragmentActivity;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.password.ChooseLockTypeDialogFragment.OnLockTypeSelectedListener;
|
import com.android.settings.password.ChooseLockTypeDialogFragment.OnLockTypeSelectedListener;
|
||||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -43,7 +44,7 @@ import org.robolectric.annotation.Config;
|
|||||||
import org.robolectric.shadows.androidx.fragment.FragmentController;
|
import org.robolectric.shadows.androidx.fragment.FragmentController;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = ShadowAlertDialogCompat.class)
|
@Config(shadows = {ShadowAlertDialogCompat.class, ShadowLockPatternUtils.class})
|
||||||
public class ChooseLockTypeDialogFragmentTest {
|
public class ChooseLockTypeDialogFragmentTest {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
@@ -34,6 +34,7 @@ import com.android.settings.password.ChooseLockPassword.IntentBuilder;
|
|||||||
import com.android.settings.password.SetupChooseLockPassword.SetupChooseLockPasswordFragment;
|
import com.android.settings.password.SetupChooseLockPassword.SetupChooseLockPasswordFragment;
|
||||||
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
import com.android.settings.testutils.shadow.SettingsShadowResources;
|
||||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||||
import com.android.settings.widget.ScrollToParentEditText;
|
import com.android.settings.widget.ScrollToParentEditText;
|
||||||
|
|
||||||
@@ -57,7 +58,13 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {SettingsShadowResources.class, ShadowUtils.class, ShadowAlertDialogCompat.class})
|
@Config(
|
||||||
|
shadows = {
|
||||||
|
SettingsShadowResources.class,
|
||||||
|
ShadowLockPatternUtils.class,
|
||||||
|
ShadowUtils.class,
|
||||||
|
ShadowAlertDialogCompat.class
|
||||||
|
})
|
||||||
public class SetupChooseLockPasswordTest {
|
public class SetupChooseLockPasswordTest {
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
@@ -38,6 +38,7 @@ import com.android.settings.SetupRedactionInterstitial;
|
|||||||
import com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment;
|
import com.android.settings.password.ChooseLockPattern.ChooseLockPatternFragment;
|
||||||
import com.android.settings.password.ChooseLockPattern.IntentBuilder;
|
import com.android.settings.password.ChooseLockPattern.IntentBuilder;
|
||||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||||
|
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
|
||||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||||
|
|
||||||
import com.google.android.setupcompat.PartnerCustomizationLayout;
|
import com.google.android.setupcompat.PartnerCustomizationLayout;
|
||||||
@@ -57,7 +58,7 @@ import org.robolectric.util.ReflectionHelpers.ClassParameter;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {ShadowUtils.class, ShadowAlertDialogCompat.class})
|
@Config(shadows = {ShadowUtils.class, ShadowAlertDialogCompat.class, ShadowLockPatternUtils.class})
|
||||||
public class SetupChooseLockPatternTest {
|
public class SetupChooseLockPatternTest {
|
||||||
|
|
||||||
private SetupChooseLockPattern mActivity;
|
private SetupChooseLockPattern mActivity;
|
||||||
|
@@ -31,6 +31,11 @@ public class ShadowLockPatternUtils {
|
|||||||
|
|
||||||
private static boolean sDeviceEncryptionEnabled;
|
private static boolean sDeviceEncryptionEnabled;
|
||||||
|
|
||||||
|
@Implementation
|
||||||
|
protected boolean hasSecureLockScreen() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Implementation
|
@Implementation
|
||||||
protected boolean isSecure(int id) {
|
protected boolean isSecure(int id) {
|
||||||
return true;
|
return true;
|
||||||
|
Reference in New Issue
Block a user