diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8b67880..e1a6595 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2973,6 +2973,13 @@
         </activity>
 
         <activity
+            android:name=".users.AddSupervisedUserActivity"
+            android:label="@*android:string/supervised_user_creation_label"
+            android:icon="@drawable/ic_settings_multiuser"
+            android:exported="true">
+        </activity>
+
+        <activity
             android:name="Settings$PaymentSettingsActivity"
             android:label="@string/nfc_payment_settings_title"
             android:exported="true"
diff --git a/res/layout/add_supervised_user.xml b/res/layout/add_supervised_user.xml
new file mode 100644
index 0000000..33032bd
--- /dev/null
+++ b/res/layout/add_supervised_user.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2021 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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:layout_margin="16dp"
+              android:orientation="vertical">
+    <Button
+        android:id="@+id/createSupervisedUser"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:text="@*android:string/supervised_user_creation_label" />
+    <TextView
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:text="@string/placeholder_activity" />
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b32c41d..e33bd1b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13968,6 +13968,9 @@
     <!-- Text on the dialog button to reboot the device later [CHAR LIMIT=50] -->
     <string name="reboot_dialog_reboot_later">Reboot later</string>
 
+    <!-- Text to explain an activity is a temporary placeholder [CHAR LIMIT=none] -->
+    <string name="placeholder_activity" translatable="false">*This is a temporary placeholder fallback activity.</string>
+
     <!-- The title of the spatial audio [CHAR LIMIT=none] -->
     <string name="bluetooth_details_spatial_audio_title">Spatial audio</string>
     <!-- The summary of the spatial audio [CHAR LIMIT=none] -->
diff --git a/src/com/android/settings/users/AddSupervisedUserActivity.java b/src/com/android/settings/users/AddSupervisedUserActivity.java
new file mode 100644
index 0000000..8a3221d
--- /dev/null
+++ b/src/com/android/settings/users/AddSupervisedUserActivity.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2021 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.users;
+
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.NewUserRequest;
+import android.os.NewUserResponse;
+import android.os.UserManager;
+
+import androidx.annotation.Nullable;
+
+import com.android.settings.R;
+
+import java.util.Objects;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+
+/**
+ * Fallback activity for supervised user creation.
+ * Built to test {@link UserManager#createUser(NewUserRequest)} API.
+ */
+// TODO(b/209659998): [to-be-removed] fallback activity for supervised user creation.
+public class AddSupervisedUserActivity extends Activity {
+
+    private UserManager mUserManager;
+    private ActivityManager mActivityManager;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mUserManager = getSystemService(UserManager.class);
+        mActivityManager = getSystemService(ActivityManager.class);
+        setContentView(R.layout.add_supervised_user);
+        findViewById(R.id.createSupervisedUser).setOnClickListener(v -> createUser());
+    }
+
+    private void createUserAsync(final NewUserRequest request,
+            final Consumer<NewUserResponse> onResponse) {
+        Objects.requireNonNull(onResponse);
+
+        final Handler mMainThread = new Handler(Looper.getMainLooper());
+        Executors.newSingleThreadExecutor().execute(() -> {
+            final NewUserResponse response = mUserManager.createUser(request);
+            mMainThread.post(() -> onResponse.accept(response));
+        });
+    }
+
+    private void createUser() {
+        final NewUserRequest request = new NewUserRequest.Builder()
+                .setName(getString(R.string.user_new_user_name))
+                .build();
+
+        final AlertDialog pleaseWaitDialog = new AlertDialog.Builder(this)
+                .setMessage(getString(R.string.creating_new_user_dialog_message))
+                .setCancelable(false)
+                .create();
+
+        pleaseWaitDialog.show();
+        createUserAsync(request, response -> {
+            pleaseWaitDialog.dismiss();
+
+            if (response.isSuccessful()) {
+                mActivityManager.switchUser(response.getUser());
+                finish();
+            } else {
+                new AlertDialog.Builder(this)
+                        .setTitle(getString(R.string.add_user_failed))
+                        .setMessage(UserManager.UserOperationResult.class.getName()
+                                + " = " + response.getOperationResult())
+                        .setNeutralButton(getString(R.string.okay), null)
+                        .show();
+            }
+        });
+    }
+}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 4044b8b..9878b44 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -514,6 +514,13 @@
                 .setPackage(mConfigSupervisedUserCreationPackage)
                 .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
+        // TODO(b/209659998): [to-be-removed] fallback activity for supervised user creation.
+        if (getActivity().getPackageManager().resolveActivity(intent, 0) == null) {
+            intent
+                .setClass(getContext(), AddSupervisedUserActivity.class)
+                .setPackage(null);
+        }
+
         startActivity(intent);
     }
 
