From 3a0e1f8ea73a0468faa4b331a5693f374306a68f Mon Sep 17 00:00:00 2001 From: Bartosz Fabianowski Date: Mon, 17 Jul 2017 12:41:52 +0200 Subject: [PATCH] Fix "max failed login attempts" disclosure Among other things, the managed device info page informs the user when their administrator sets the "max failed login attempts" policy. This disclosure does not show up when set by the Device Owner right now because the code expects it to have been set by a Profile Owner. This was a regression introduced by ag/2039754. Bug: 63696536 Test: CTSVerifier: Managed Provisioning > Device Owner Tests > Test: Managed device info tests > Wipe on authentication failure Change-Id: I5c53f325a1acfb98c72178ac9dab78f18f714c51 --- .../settings/enterprise/DevicePolicyManagerWrapper.java | 7 +++++++ .../enterprise/DevicePolicyManagerWrapperImpl.java | 5 +++++ .../enterprise/EnterprisePrivacyFeatureProviderImpl.java | 9 ++++++--- .../EnterprisePrivacyFeatureProviderImplTest.java | 5 +++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java b/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java index babf90e1955..8605b2e0215 100644 --- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java +++ b/src/com/android/settings/enterprise/DevicePolicyManagerWrapper.java @@ -44,6 +44,13 @@ public interface DevicePolicyManagerWrapper { */ int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle); + /** + * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnCallingUser()}. + * + * @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnCallingUser + */ + ComponentName getDeviceOwnerComponentOnCallingUser(); + /** * Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnAnyUser()}. * diff --git a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java b/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java index 7906310682d..e11aaf65e7a 100644 --- a/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java +++ b/src/com/android/settings/enterprise/DevicePolicyManagerWrapperImpl.java @@ -41,6 +41,11 @@ public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrappe return mDpm.getMaximumFailedPasswordsForWipe(admin, userHandle); } + @Override + public ComponentName getDeviceOwnerComponentOnCallingUser() { + return mDpm.getDeviceOwnerComponentOnCallingUser(); + } + @Override public ComponentName getDeviceOwnerComponentOnAnyUser() { return mDpm.getDeviceOwnerComponentOnAnyUser(); diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index 46ecb7e620f..a5e2f3c955c 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -158,11 +158,14 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe @Override public int getMaximumFailedPasswordsBeforeWipeInCurrentUser() { - final ComponentName profileOwner = mDpm.getProfileOwnerAsUser(MY_USER_ID); - if (profileOwner == null) { + ComponentName owner = mDpm.getDeviceOwnerComponentOnCallingUser(); + if (owner == null) { + owner = mDpm.getProfileOwnerAsUser(MY_USER_ID); + } + if (owner == null) { return 0; } - return mDpm.getMaximumFailedPasswordsForWipe(profileOwner, MY_USER_ID); + return mDpm.getMaximumFailedPasswordsForWipe(owner, MY_USER_ID); } @Override diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java index d506a8eca2f..474b278afda 100644 --- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java @@ -231,6 +231,7 @@ public final class EnterprisePrivacyFeatureProviderImplTest { @Test public void testGetMaximumFailedPasswordsForWipeInCurrentUser() { + when(mDevicePolicyManager.getDeviceOwnerComponentOnCallingUser()).thenReturn(null); when(mDevicePolicyManager.getProfileOwnerAsUser(MY_USER_ID)).thenReturn(null); when(mDevicePolicyManager.getMaximumFailedPasswordsForWipe(OWNER, MY_USER_ID)) .thenReturn(10); @@ -238,6 +239,10 @@ public final class EnterprisePrivacyFeatureProviderImplTest { when(mDevicePolicyManager.getProfileOwnerAsUser(MY_USER_ID)).thenReturn(OWNER); assertThat(mProvider.getMaximumFailedPasswordsBeforeWipeInCurrentUser()).isEqualTo(10); + + when(mDevicePolicyManager.getDeviceOwnerComponentOnCallingUser()).thenReturn(OWNER); + when(mDevicePolicyManager.getProfileOwnerAsUser(MY_USER_ID)).thenReturn(null); + assertThat(mProvider.getMaximumFailedPasswordsBeforeWipeInCurrentUser()).isEqualTo(10); } @Test