Restrict Settings Homepage prior to provisioning

Bug: 327749022
Test: manual test
1. factory reset + launch Settings via ADB during Setup -> verify app closes
2. factory reset + bypass Setup + tap Settings icon in launcher -> verify app closes

Change-Id: I8cbe38109ebf88a0f68f3917e95468a81c6463c1
This commit is contained in:
Chris Antol
2024-03-25 23:49:35 +00:00
parent 6263205fa8
commit 70a5a0fd35
2 changed files with 28 additions and 0 deletions

View File

@@ -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);

View File

@@ -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(