diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a8e0390..e32d129 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3027,13 +3027,6 @@
         </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
deleted file mode 100644
index 33032bd..0000000
--- a/res/layout/add_supervised_user.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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 8f7c1c2..03666c7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -14128,9 +14128,6 @@
     <!-- 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/applications/appinfo/AppInfoDashboardFragment.java b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
index 18cb4b3..54455d4 100755
--- a/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
+++ b/src/com/android/settings/applications/appinfo/AppInfoDashboardFragment.java
@@ -408,7 +408,13 @@
             return;
         }
         super.onPrepareOptionsMenu(menu);
-        menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(shouldShowUninstallForAll(mAppEntry));
+        final MenuItem uninstallAllUsersItem = menu.findItem(UNINSTALL_ALL_USERS_MENU);
+        uninstallAllUsersItem.setVisible(
+                shouldShowUninstallForAll(mAppEntry) && !mAppsControlDisallowedBySystem);
+        if (uninstallAllUsersItem.isVisible()) {
+            RestrictedLockUtilsInternal.setMenuItemAsDisabledByAdmin(getActivity(),
+                    uninstallAllUsersItem, mAppsControlDisallowedAdmin);
+        }
         menu.findItem(ACCESS_RESTRICTED_SETTINGS).setVisible(shouldShowAccessRestrictedSettings());
         mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
         final MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES);
diff --git a/src/com/android/settings/notification/MediaVolumePreferenceController.java b/src/com/android/settings/notification/MediaVolumePreferenceController.java
index 05c8e03..ccde937 100644
--- a/src/com/android/settings/notification/MediaVolumePreferenceController.java
+++ b/src/com/android/settings/notification/MediaVolumePreferenceController.java
@@ -120,7 +120,7 @@
                     getWorker().getActiveLocalMediaController().getPackageName());
 
             pi = PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
-                    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
+                    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
         } else {
             final CachedBluetoothDevice bluetoothDevice =
                     ((BluetoothMediaDevice) mMediaDevice).getCachedDevice();
@@ -135,7 +135,7 @@
                     bluetoothDevice.getAddress());
 
             pi = PendingIntent.getActivity(context, 0 /* requestCode */, intent,
-                    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
+                    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
         }
 
         final IconCompat icon = getBroadcastIcon(context);
diff --git a/src/com/android/settings/users/AddSupervisedUserActivity.java b/src/com/android/settings/users/AddSupervisedUserActivity.java
deleted file mode 100644
index 8a3221d..0000000
--- a/src/com/android/settings/users/AddSupervisedUserActivity.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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 358b87b..5ee95dd 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -518,13 +518,6 @@
                 .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);
     }
 
