diff --git a/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java b/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java
index c7ae2e5..e185915 100644
--- a/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java
+++ b/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreference.java
@@ -22,6 +22,8 @@
 import androidx.preference.PreferenceViewHolder;
 
 import com.android.car.settings.common.PasswordEditTextPreference;
+import com.android.car.ui.R;
+import com.android.car.ui.utils.CarUiUtils;
 
 /**
  * A {@link PasswordEditTextPreference} which has a second button which can perform another
@@ -60,14 +62,17 @@
     @Override
     public void onBindViewHolder(PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
+        View containerWithoutWidget = CarUiUtils.findViewByRefId(holder.itemView,
+                R.id.car_ui_preference_container_without_widget);
         View actionContainer = getWidgetActionContainer(holder);
         View widgetFrame = holder.findViewById(android.R.id.widget_frame);
-        if (mIsButtonShown) {
-            actionContainer.setVisibility(View.VISIBLE);
-            widgetFrame.setOnClickListener(v -> performButtonClick());
-        } else {
-            actionContainer.setVisibility(View.GONE);
-        }
+        holder.itemView.setFocusable(!mIsButtonShown);
+        containerWithoutWidget.setOnClickListener(mIsButtonShown ? this::performClick : null);
+        containerWithoutWidget.setClickable(mIsButtonShown);
+        containerWithoutWidget.setFocusable(mIsButtonShown);
+        actionContainer.setVisibility(mIsButtonShown ? View.VISIBLE : View.GONE);
+        widgetFrame.setOnClickListener(mIsButtonShown ? v -> performButtonClick() : null);
+        widgetFrame.setFocusable(mIsButtonShown);
     }
 
     /**
diff --git a/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java b/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java
index a8d9297..937064e 100644
--- a/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java
+++ b/tests/robotests/src/com/android/car/settings/wifi/ButtonPasswordEditTextPreferenceTest.java
@@ -16,6 +16,8 @@
 
 package com.android.car.settings.wifi;
 
+import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -82,4 +84,40 @@
         mButtonPreference.performButtonClick();
         verify(listener, never()).onButtonClick(mButtonPreference);
     }
+
+    @Test
+    public void onBindViewHolder_buttonShown() {
+        mButtonPreference.showButton(true);
+        View containerWithoutWidget = mViewHolder.findViewById(
+                com.android.car.ui.R.id.car_ui_preference_container_without_widget);
+        View actionContainer = mButtonPreference.getWidgetActionContainer(mViewHolder);
+        View widgetFrame = mViewHolder.findViewById(android.R.id.widget_frame);
+
+        mButtonPreference.onBindViewHolder(mViewHolder);
+
+        assertThat(mViewHolder.itemView.isFocusable()).isFalse();
+        assertThat(containerWithoutWidget.isClickable()).isTrue();
+        assertThat(containerWithoutWidget.isFocusable()).isTrue();
+        assertThat(actionContainer.getVisibility()).isEqualTo(View.VISIBLE);
+        assertThat(widgetFrame.isClickable()).isTrue();
+        assertThat(widgetFrame.isFocusable()).isTrue();
+    }
+
+    @Test
+    public void onBindViewHolder_buttonNotShown() {
+        mButtonPreference.showButton(false);
+        View containerWithoutWidget = mViewHolder.findViewById(
+                com.android.car.ui.R.id.car_ui_preference_container_without_widget);
+        View actionContainer = mButtonPreference.getWidgetActionContainer(mViewHolder);
+        View widgetFrame = mViewHolder.findViewById(android.R.id.widget_frame);
+
+        mButtonPreference.onBindViewHolder(mViewHolder);
+
+        assertThat(mViewHolder.itemView.isFocusable()).isTrue();
+        assertThat(containerWithoutWidget.isClickable()).isFalse();
+        assertThat(containerWithoutWidget.isFocusable()).isFalse();
+        assertThat(actionContainer.getVisibility()).isEqualTo(View.GONE);
+        assertThat(widgetFrame.isClickable()).isFalse();
+        assertThat(widgetFrame.isFocusable()).isFalse();
+    }
 }
