diff --git a/src/com/android/settings/MainClearConfirm.java b/src/com/android/settings/MainClearConfirm.java index 042c5c26c1a..a5fbebf6e8e 100644 --- a/src/com/android/settings/MainClearConfirm.java +++ b/src/com/android/settings/MainClearConfirm.java @@ -89,8 +89,7 @@ public class MainClearConfirm extends InstrumentedFragment { final PersistentDataBlockManager pdbManager; // pre-flight check hardware support PersistentDataBlockManager if (!SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals("")) { - pdbManager = (PersistentDataBlockManager) - getActivity().getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE); + pdbManager = getActivity().getSystemService(PersistentDataBlockManager.class); } else { pdbManager = null; } @@ -152,6 +151,11 @@ public class MainClearConfirm extends InstrumentedFragment { return false; } + // Do not try to erase factory reset protection data if the protection is alive. + if (pdbManager.isFactoryResetProtectionActive()) { + return false; + } + // The persistent data block will persist if the device is still being provisioned. if (isDeviceStillBeingProvisioned()) { return false; diff --git a/tests/robotests/src/com/android/settings/MainClearConfirmTest.java b/tests/robotests/src/com/android/settings/MainClearConfirmTest.java index 6d85368d0b8..f7711c81311 100644 --- a/tests/robotests/src/com/android/settings/MainClearConfirmTest.java +++ b/tests/robotests/src/com/android/settings/MainClearConfirmTest.java @@ -77,6 +77,7 @@ public class MainClearConfirmTest { when(mMockActivity.getSystemService(Context.DEVICE_POLICY_SERVICE)) .thenReturn(mDevicePolicyManager); + when(mPersistentDataBlockManager.isFactoryResetProtectionActive()).thenReturn(false); } @Test @@ -112,6 +113,13 @@ public class MainClearConfirmTest { assertThat(mMainClearConfirm.shouldWipePersistentDataBlock(null)).isFalse(); } + @Test + public void shouldWipePersistentDataBlock_frpIsAlive_shouldReturnFalse() { + when(mPersistentDataBlockManager.isFactoryResetProtectionActive()).thenReturn(true); + assertThat(mMainClearConfirm.shouldWipePersistentDataBlock(mPersistentDataBlockManager)) + .isFalse(); + } + @Test public void shouldWipePersistentDataBlock_deviceIsStillBeingProvisioned_shouldReturnFalse() { doReturn(true).when(mMainClearConfirm).isDeviceStillBeingProvisioned();