Fix crash if trying to erase the FRP data.

- Once factory reset protection is on, user data shall not be erased.

Flag: EXEMPT bug fix
Fix: 345587437
Test: Manual test passed
Test: atest passed
Change-Id: I9506224cae7ba12c4181f2b2c676e5eb8ec27431
This commit is contained in:
tomhsu
2024-06-07 06:52:46 +00:00
committed by Tom Hsu
parent 1010a85eda
commit fbb56c4d1c
2 changed files with 14 additions and 2 deletions

View File

@@ -89,8 +89,7 @@ public class MainClearConfirm extends InstrumentedFragment {
final PersistentDataBlockManager pdbManager; final PersistentDataBlockManager pdbManager;
// pre-flight check hardware support PersistentDataBlockManager // pre-flight check hardware support PersistentDataBlockManager
if (!SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals("")) { if (!SystemProperties.get(PERSISTENT_DATA_BLOCK_PROP).equals("")) {
pdbManager = (PersistentDataBlockManager) pdbManager = getActivity().getSystemService(PersistentDataBlockManager.class);
getActivity().getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
} else { } else {
pdbManager = null; pdbManager = null;
} }
@@ -152,6 +151,11 @@ public class MainClearConfirm extends InstrumentedFragment {
return false; 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. // The persistent data block will persist if the device is still being provisioned.
if (isDeviceStillBeingProvisioned()) { if (isDeviceStillBeingProvisioned()) {
return false; return false;

View File

@@ -77,6 +77,7 @@ public class MainClearConfirmTest {
when(mMockActivity.getSystemService(Context.DEVICE_POLICY_SERVICE)) when(mMockActivity.getSystemService(Context.DEVICE_POLICY_SERVICE))
.thenReturn(mDevicePolicyManager); .thenReturn(mDevicePolicyManager);
when(mPersistentDataBlockManager.isFactoryResetProtectionActive()).thenReturn(false);
} }
@Test @Test
@@ -112,6 +113,13 @@ public class MainClearConfirmTest {
assertThat(mMainClearConfirm.shouldWipePersistentDataBlock(null)).isFalse(); assertThat(mMainClearConfirm.shouldWipePersistentDataBlock(null)).isFalse();
} }
@Test
public void shouldWipePersistentDataBlock_frpIsAlive_shouldReturnFalse() {
when(mPersistentDataBlockManager.isFactoryResetProtectionActive()).thenReturn(true);
assertThat(mMainClearConfirm.shouldWipePersistentDataBlock(mPersistentDataBlockManager))
.isFalse();
}
@Test @Test
public void shouldWipePersistentDataBlock_deviceIsStillBeingProvisioned_shouldReturnFalse() { public void shouldWipePersistentDataBlock_deviceIsStillBeingProvisioned_shouldReturnFalse() {
doReturn(true).when(mMainClearConfirm).isDeviceStillBeingProvisioned(); doReturn(true).when(mMainClearConfirm).isDeviceStillBeingProvisioned();