diff --git a/res/layout/user_picker.xml b/res/layout/user_picker.xml
index 46467a4..73fbf0a 100644
--- a/res/layout/user_picker.xml
+++ b/res/layout/user_picker.xml
@@ -14,7 +14,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout
+<com.android.systemui.car.userpicker.UserPickerFrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:systemui="http://schemas.android.com/apk/res-auto"
@@ -139,4 +139,4 @@
                 systemui:amPmStyle="gone"/>
         </androidx.constraintlayout.widget.ConstraintLayout>
     </com.android.car.ui.ConstraintFocusArea>
-</FrameLayout>
+</com.android.systemui.car.userpicker.UserPickerFrameLayout>
diff --git a/src/com/android/systemui/car/userpicker/UserPickerActivity.java b/src/com/android/systemui/car/userpicker/UserPickerActivity.java
index 006b391..cb8313e 100644
--- a/src/com/android/systemui/car/userpicker/UserPickerActivity.java
+++ b/src/com/android/systemui/car/userpicker/UserPickerActivity.java
@@ -17,7 +17,6 @@
 package com.android.systemui.car.userpicker;
 
 import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
-import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 import static android.window.OnBackInvokedDispatcher.PRIORITY_DEFAULT;
 
 import static com.android.systemui.car.userpicker.HeaderState.HEADER_STATE_CHANGE_USER;
@@ -38,7 +37,6 @@
 import android.view.Window;
 import android.view.WindowInsets;
 import android.view.WindowInsetsController;
-import android.view.WindowManager;
 import android.window.OnBackInvokedCallback;
 
 import androidx.annotation.NonNull;
@@ -188,12 +186,6 @@
         mDumpManager.registerNormalDumpable(dumpableName, /* module= */ this);
     }
 
-    @Override
-    protected void onStart() {
-        super.onStart();
-        getWindow().addSystemFlags(SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-    }
-
     private void initViews() {
         View powerBtn = mRootView.findViewById(R.id.power_button_icon_view);
         powerBtn.setOnClickListener(v -> mController.screenOffDisplay());
@@ -281,16 +273,6 @@
     }
 
     @Override
-    protected void onStop() {
-        Window window = getWindow();
-        WindowManager.LayoutParams attrs = window.getAttributes();
-        attrs.privateFlags &= ~SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
-        window.setAttributes(attrs);
-
-        super.onStop();
-    }
-
-    @Override
     protected void onDestroy() {
         if (DEBUG) {
             Slog.d(TAG, "onDestroy: displayId=" + getDisplayId());
diff --git a/src/com/android/systemui/car/userpicker/UserPickerFrameLayout.java b/src/com/android/systemui/car/userpicker/UserPickerFrameLayout.java
new file mode 100644
index 0000000..c1789de
--- /dev/null
+++ b/src/com/android/systemui/car/userpicker/UserPickerFrameLayout.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2024 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.systemui.car.userpicker;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.FrameLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/** Standard FrameLayout with added touch filtering when partially obscured. */
+public class UserPickerFrameLayout extends FrameLayout {
+    public UserPickerFrameLayout(@NonNull Context context) {
+        super(context);
+    }
+
+    public UserPickerFrameLayout(@NonNull Context context,
+            @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public UserPickerFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs,
+            int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public UserPickerFrameLayout(@NonNull Context context, @Nullable AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    public boolean onFilterTouchEventForSecurity(MotionEvent event) {
+        return ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) == 0)
+                && super.onFilterTouchEventForSecurity(event);
+    }
+}
