Work around focusSearch bug in access point pref

ButtonPasswordEditTextPreference uses the two-action layout so it needs
the same changes as CarUiTwoActionPreference.

Bug: 167994619
Test: manual, atest CarRotaryControllerRoboTests
Change-Id: I6eb745b0880ac8225706189df0ad876b8cf8424b
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();
+    }
 }