diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index 6688831248c..5f091d99e61 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -187,6 +187,15 @@ public class SettingsHomepageActivity extends FragmentActivity implements protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + // Ensure device is provisioned in order to access Settings home + // TODO(b/331254029): This should later be replaced in favor of an allowlist + boolean unprovisioned = android.provider.Settings.Global.getInt(getContentResolver(), + android.provider.Settings.Global.DEVICE_PROVISIONED, 0) == 0; + if (unprovisioned) { + Log.e(TAG, "Device is not provisioned, exiting Settings"); + finish(); + } + mIsEmbeddingActivityEnabled = ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this); if (mIsEmbeddingActivityEnabled) { final UserManager um = getSystemService(UserManager.class); diff --git a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java index 6431306cbc3..0d1ee9c7caa 100644 --- a/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java +++ b/tests/robotests/src/com/android/settings/homepage/SettingsHomepageActivityTest.java @@ -38,6 +38,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; +import android.provider.Settings; import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -54,6 +55,7 @@ import com.android.settings.testutils.shadow.ShadowUserManager; import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin; import org.junit.After; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -80,11 +82,28 @@ public class SettingsHomepageActivityTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Before + public void setup() { + Settings.Global.putInt(ApplicationProvider.getApplicationContext().getContentResolver(), + Settings.Global.DEVICE_PROVISIONED, 1); + } + @After public void tearDown() { ShadowPasswordUtils.reset(); } + @Test + public void launch_deviceUnprovisioned_finish() { + Settings.Global.putInt(ApplicationProvider.getApplicationContext().getContentResolver(), + Settings.Global.DEVICE_PROVISIONED, 0); + + SettingsHomepageActivity activity = Robolectric.buildActivity( + SettingsHomepageActivity.class).create().get(); + + assertThat(activity.isFinishing()).isTrue(); + } + @Test public void launch_shouldHaveAnimationForIaFragment() { final SettingsHomepageActivity activity = Robolectric.buildActivity(