diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java index 6809f35e874..755d1586b8a 100644 --- a/src/com/android/settings/password/ChooseLockGeneric.java +++ b/src/com/android/settings/password/ChooseLockGeneric.java @@ -42,6 +42,7 @@ import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; +import android.service.persistentdata.PersistentDataBlockManager; import android.text.TextUtils; import android.util.EventLog; import android.util.Log; @@ -281,7 +282,11 @@ public class ChooseLockGeneric extends SettingsActivity { } protected boolean canRunBeforeDeviceProvisioned() { - return false; + PersistentDataBlockManager pdbm = (PersistentDataBlockManager) + getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE); + + // Can only run during setup if factory reset protection has already been cleared + return (pdbm != null && pdbm.getDataBlockSize() == 0); } protected Class getInternalActivityClass() { diff --git a/src/com/android/settings/password/SetNewPasswordActivity.java b/src/com/android/settings/password/SetNewPasswordActivity.java index 4bffbf5f995..19f2941cc7a 100644 --- a/src/com/android/settings/password/SetNewPasswordActivity.java +++ b/src/com/android/settings/password/SetNewPasswordActivity.java @@ -110,7 +110,7 @@ public class SetNewPasswordActivity extends Activity implements SetNewPasswordCo @Override public void launchChooseLock(Bundle chooseLockFingerprintExtras) { - final boolean isInSetupWizard = !WizardManagerHelper.isDeviceProvisioned(this); + final boolean isInSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent()); Intent intent = isInSetupWizard ? new Intent(this, SetupChooseLockGeneric.class) : new Intent(this, ChooseLockGeneric.class); intent.setAction(mNewPasswordAction); diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java index 1bdadb28cd0..6b3fdf421cf 100644 --- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java +++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java @@ -46,6 +46,7 @@ import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment; import com.android.settings.search.SearchFeatureProvider; import com.android.settings.testutils.shadow.ShadowLockPatternUtils; +import com.android.settings.testutils.shadow.ShadowPersistentDataBlockManager; import com.android.settings.testutils.shadow.ShadowStorageManager; import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settings.testutils.shadow.ShadowUtils; @@ -63,6 +64,7 @@ import org.robolectric.annotation.Config; @Config( shadows = { ShadowLockPatternUtils.class, + ShadowPersistentDataBlockManager.class, ShadowStorageManager.class, ShadowUserManager.class, ShadowUtils.class @@ -82,11 +84,13 @@ public class ChooseLockGenericTest { public void tearDown() { Global.putInt(application.getContentResolver(), Global.DEVICE_PROVISIONED, 1); ShadowStorageManager.reset(); + ShadowPersistentDataBlockManager.reset(); } @Test - public void onCreate_deviceNotProvisioned_shouldFinishActivity() { + public void onCreate_deviceNotProvisioned_persistentDataExists_shouldFinishActivity() { Global.putInt(application.getContentResolver(), Global.DEVICE_PROVISIONED, 0); + ShadowPersistentDataBlockManager.setDataBlockSize(1000); initActivity(null); assertThat(mActivity.isFinishing()).isTrue(); @@ -191,7 +195,18 @@ public class ChooseLockGenericTest { } @Test - public void updatePreferencesOrFinish_callingAppIsAdmin_footerInvisible() { + public void updatePreferencesOrFinish_callingAppIsAdmin_deviceProvisioned_footerInvisible() { + initActivity(new Intent().putExtra(EXTRA_KEY_IS_CALLING_APP_ADMIN, true)); + + mFragment.updatePreferencesOrFinish(/* isRecreatingActivity= */ false); + + FooterPreference footer = mFragment.findPreference(KEY_LOCK_SETTINGS_FOOTER); + assertThat(footer.isVisible()).isFalse(); + } + + @Test + public void updatePreferencesOrFinish_callingAppIsAdmin_deviceNotProvisioned_footerInvisible() { + Global.putInt(application.getContentResolver(), Global.DEVICE_PROVISIONED, 0); initActivity(new Intent().putExtra(EXTRA_KEY_IS_CALLING_APP_ADMIN, true)); mFragment.updatePreferencesOrFinish(/* isRecreatingActivity= */ false); diff --git a/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java b/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java index 04a2157aeee..b36af98df93 100644 --- a/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java +++ b/tests/robotests/src/com/android/settings/password/SetNewPasswordActivityTest.java @@ -45,6 +45,8 @@ import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowPasswordUtils; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; +import com.google.android.setupcompat.util.WizardManagerHelper; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -111,6 +113,7 @@ public class SetNewPasswordActivityTest { activity.launchChooseLock(new Bundle()); ShadowActivity shadowActivity = Shadows.shadowOf(activity); Intent intent = getLaunchChooseLockIntent(shadowActivity); + intent.putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true); assertThat(intent.getComponent()) .isEqualTo(new ComponentName(activity, SetupChooseLockGeneric.class)); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPersistentDataBlockManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPersistentDataBlockManager.java new file mode 100644 index 00000000000..dbbdd3d57de --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPersistentDataBlockManager.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.testutils.shadow; + +import android.service.persistentdata.PersistentDataBlockManager; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; +import org.robolectric.annotation.Resetter; + +@Implements(PersistentDataBlockManager.class) +public class ShadowPersistentDataBlockManager { + private static int sDataBlockSize = 0; + + @Resetter + public static void reset() { + sDataBlockSize = 0; + } + + @Implementation + protected int getDataBlockSize() { + return sDataBlockSize; + } + + public static void setDataBlockSize(int dataBlockSize) { + sDataBlockSize = dataBlockSize; + } +}